英文:
When I send user to another activity it reloads again and again to endless time
问题
I understand that you want the code you provided to be translated into Chinese. Here is the translated code:
// 上传帖子并存储到Firebase
public class ProjectActivity extends AppCompatActivity {
// ... 请参考原文代码
// 此处省略已翻译部分
private void sendUserToMainActivity() {
Intent mainIntent = new Intent(ProjectActivity.this, MainActivity.class);
startActivity(mainIntent);
this.finish();
}
}
// 主活动
public class MainActivity extends AppCompatActivity {
// ... 请参考原文代码
// 此处省略已翻译部分
private void sendUserToProjectActivity() {
Intent addNewProjectIntent = new Intent(MainActivity.this, ProjectActivity.class);
startActivity(addNewProjectIntent);
}
}
请注意,翻译过程中可能存在排版和细节的微小差异。如果您需要更多帮助,请随时询问。
英文:
I have a simple activity in which a user will upload a post, after uploading post user will redirect to Main Activity, but the problem is when the user redirects to the main activity it reloads again and again to endless time.
public class ProjectActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ImageButton selectProjectImage;
private Button uploadProjectButton;
private EditText projectDescription;
private static final int gallery_pick=1;
private Uri imageUri;
private String description;
private ProgressDialog loadingBar;
// URL of String
private String downloadUrl;
//Date and Time
private String saveCurrentDate , saveCurrentTime , projectRandomName;
private long countProjects=0;
// Firebase
private StorageReference projectImagesRefernce;
private DatabaseReference usersRef , projectRef;
private FirebaseAuth mAuth;
private String currentUserId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project);
//Firebase
projectImagesRefernce = FirebaseStorage.getInstance().getReference();
usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
projectRef = FirebaseDatabase.getInstance().getReference().child("Projects");
mAuth = FirebaseAuth.getInstance();
currentUserId = mAuth.getCurrentUser().getUid();
selectProjectImage=(ImageButton)findViewById(R.id.select_project_image);
uploadProjectButton =(Button)findViewById(R.id.upload_project_btn);
projectDescription=(EditText)findViewById(R.id.project_description);
loadingBar = new ProgressDialog(this);
mToolbar = (Toolbar) findViewById(R.id.update_project_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Upload Project");
selectProjectImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGalley();
}
});
Here we called upload project onclickListener
uploadProjectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
validateProjectInfo();
}
});
}
Remaining code
private void validateProjectInfo()
{
description = projectDescription.getText().toString();
if(imageUri==null)
{
Toast.makeText(this, "Please select project Image", Toast.LENGTH_SHORT).show();
}
else if (TextUtils.isEmpty(description))
{
Toast.makeText(this, "Please provide description of project", Toast.LENGTH_SHORT).show();
}
else
{
loadingBar.setTitle("Adding new Project");
loadingBar.setMessage("Please wait ...");
loadingBar.show();
loadingBar.setCanceledOnTouchOutside(true);
storingImageToFirebaseStorage();
}
}
private void storingImageToFirebaseStorage()
{
// For Date
Calendar calForData = Calendar.getInstance();
SimpleDateFormat currentDate = new SimpleDateFormat("dd-MMM-yyyy");
saveCurrentDate = currentDate.format(calForData.getTime());
// For Time
Calendar calForTime = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm");
saveCurrentTime = currentTime.format(calForData.getTime());
// Random Name
projectRandomName=saveCurrentDate + saveCurrentTime;
final StorageReference filepath = projectImagesRefernce.child("project images").child(imageUri.getLastPathSegment()
+projectRandomName + ".jpg");
filepath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
downloadUrl = uri.toString();
Toast.makeText(ProjectActivity.this,"Image uploaded",Toast.LENGTH_SHORT).show();
savingProjectInformationToDatabase();
}
});
}
});
}
private void savingProjectInformationToDatabase()
{
projectRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(dataSnapshot.exists())
{
countProjects =dataSnapshot.getChildrenCount();
}
else
{
countProjects=0;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
usersRef.child(currentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(dataSnapshot.exists())
{
String userFullName = dataSnapshot.child("fullName").getValue().toString();
String userProfileImage = dataSnapshot.child("profile image").getValue().toString();
HashMap projectMap = new HashMap();
projectMap.put("uid" ,currentUserId);
projectMap.put("date" ,saveCurrentDate);
projectMap.put("time" ,saveCurrentTime);
projectMap.put("description" ,description);
projectMap.put("projectImageUrl" ,downloadUrl);
projectMap.put("profileimage" ,userProfileImage);
projectMap.put("fullname" ,userFullName);
projectMap.put("counter",countProjects);
projectRef.child(currentUserId+projectRandomName).updateChildren(projectMap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task)
{
if (task.isSuccessful())
{
Toast.makeText(ProjectActivity.this, "Project is updated successfull", Toast.LENGTH_SHORT).show();
here we send user to main activity
sendUserToMainActivity();
Remaining code
loadingBar.dismiss();
}
else
{
String message = task.getException().toString();
Toast.makeText(ProjectActivity.this, "Error Occured :" +message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
private void openGalley()
{
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent ,gallery_pick);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==gallery_pick && resultCode==RESULT_OK && data != null)
{
imageUri = data.getData();
selectProjectImage.setImageURI(imageUri);
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item)
{
int id = item.getItemId();
also here we send user to main activity
if(id == android.R.id.home)
{
sendUserToMainActivity();
}
return super.onOptionsItemSelected(item);
}
}
The above code is all about uploading a post and storing into firebase
private void sendUserToMainActivity()
{
Intent mainIntent = new Intent(ProjectActivity.this, MainActivity.class);
startActivity(mainIntent);
this.finish();
}
Main Activity code
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import de.hdodenhof.circleimageview.CircleImageView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtoolbar =(Toolbar) findViewById(R.id.main_page_toolbar);
setSupportActionBar(mtoolbar);
getSupportActionBar().setTitle("Home");
//Recycler View
postList = (RecyclerView)findViewById(R.id.all_user_post_list);
postList.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
postList.setLayoutManager(linearLayoutManager);
//Firebase
mAuth = FirebaseAuth.getInstance();
currentUserId =mAuth.getCurrentUser().getUid();
userRef = FirebaseDatabase.getInstance().getReference().child("Users");
projectsRef = FirebaseDatabase.getInstance().getReference().child("Projects");
likesRef = FirebaseDatabase.getInstance().getReference().child("Likes");
addNewProjectBtn =(ImageButton)findViewById(R.id.add_new_project_btn);
drawerLayout = (DrawerLayout) findViewById(R.id.drawable_layout);
actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this,drawerLayout,R.string.drawer_open,R.string.drawer_close);
navigationView =(NavigationView)findViewById(R.id.navigation_view);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
View navView = navigationView.inflateHeaderView(R.layout.navigation_header);
navProfileImage =(CircleImageView)navView.findViewById(R.id.setup_profile_image);
navProfileName =(TextView)navView.findViewById(R.id.nav_user_name);
userRef.child(currentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
if(dataSnapshot.hasChild("fullName"))
{
String full_name =dataSnapshot.child("fullName").getValue().toString();
navProfileName.setText(full_name);
}
if (dataSnapshot.hasChild("profile image"))
{
String image =dataSnapshot.child("profile image").getValue().toString();
Picasso.get().load(image).placeholder(R.drawable.profile).into(navProfileImage);
}
else
{
Toast.makeText(MainActivity.this, "Profile name do not exit", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
user_menu_selector(item);
return false;
}
});
addNewProjectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
sendUserToProjectActivity();
}
});
}
public void updateUserStatus(String state)
{
String saveCurrentDate,saveCurrentTime;
// For Date
Calendar calForData = Calendar.getInstance();
SimpleDateFormat currentDate = new SimpleDateFormat("dd-MMM-yyyy");
saveCurrentDate = currentDate.format(calForData.getTime());
// For Time
Calendar calForTime = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm");
saveCurrentTime = currentTime.format(calForData.getTime());
Map currentStateMap = new HashMap();
currentStateMap.put("time" , saveCurrentTime);
currentStateMap.put("date" , saveCurrentDate);
currentStateMap.put("type" , state);
userRef.child(currentUserId).child("userState").updateChildren(currentStateMap);
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser==null){
sendUserToLoginActivity();
}
else
{
checkUserExitence();
}
Query sortPorjects = projectsRef.orderByChild("counter");
FirebaseRecyclerOptions<projects> options =
new FirebaseRecyclerOptions.Builder<projects>()
.setQuery(sortPorjects , com.codewithosama.socialapp.projects.class).build();
FirebaseRecyclerAdapter<projects, ProjectViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<projects, ProjectViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull ProjectViewHolder projectViewHolder, int i, @NonNull projects projects)
{
final String postKey = getRef(i).getKey();
projectViewHolder.userName.setText(projects.getFullname());
projectViewHolder.date.setText(projects.getDate());
projectViewHolder.time.setText(projects.getTime());
projectViewHolder.project_description.setText(projects.getDescription());
Picasso.get().load(projects.getProfileimage()).into(projectViewHolder.user_profile_image);
Picasso.get().load(projects.getProjectImageUrl()).into(projectViewHolder.project_image);
projectViewHolder.setLikeButtonStatus(postKey);
projectViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent clickPostIntent = new Intent(MainActivity.this , ClickProjectActivity.class);
clickPostIntent.putExtra("post_key" ,postKey);
startActivity(clickPostIntent);
}
});
projectViewHolder.comment_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent commentsIntent = new Intent(MainActivity.this , CommentsActivity.class);
commentsIntent.putExtra("post_key" ,postKey);
startActivity(commentsIntent);
}
});
projectViewHolder.like_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
likesChecker = true;
likesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(likesChecker.equals(true))
{
if(dataSnapshot.child(postKey).hasChild(currentUserId))
{
likesRef.child(postKey).child(currentUserId).removeValue();
likesChecker =false;
}
else
{
likesRef.child(postKey).child(currentUserId).setValue(true);
likesChecker=false;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
}
@NonNull
@Override
public ProjectViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.all_projects_layout , parent,false);
ProjectViewHolder viewHolder = new ProjectViewHolder(view);
return viewHolder;
}
};
postList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
updateUserStatus("online");
}
public static class ProjectViewHolder extends RecyclerView.ViewHolder
{
CircleImageView user_profile_image;
ImageView project_image;
TextView time , date , project_description , userName ,display_likes;
ImageButton like_btn ,comment_btn;
int countLikes;
String currentUserId;
DatabaseReference likesRef;
public ProjectViewHolder(@NonNull View itemView) {
super(itemView);
user_profile_image = itemView.findViewById(R.id.project_profile_image);
userName = itemView.findViewById(R.id.project_user_name);
time = itemView.findViewById(R.id.project_time);
date = itemView.findViewById(R.id.project_date);
project_description = itemView.findViewById(R.id.new_project_description);
project_image = itemView.findViewById(R.id.new_project_image);
like_btn = itemView.findViewById(R.id.like_btn);
comment_btn=itemView.findViewById(R.id.comment_btn);
display_likes=itemView.findViewById(R.id.display_likes);
likesRef = FirebaseDatabase.getInstance().getReference().child("Likes");
currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
}
public void setLikeButtonStatus(final String postKey)
{
likesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(dataSnapshot.child(postKey).hasChild(currentUserId))
{
countLikes = (int)dataSnapshot.child(postKey).getChildrenCount();
like_btn.setImageResource(R.drawable.clap);
display_likes.setText((Integer.toString(countLikes))+" Claps");
}
else
{
countLikes = (int)dataSnapshot.child(postKey).getChildrenCount();
like_btn.setImageResource(R.drawable.no_clap);
display_likes.setText((Integer.toString(countLikes))+" Claps");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
}
private void checkUserExitence()
{
final String current_user_id = mAuth.getCurrentUser().getUid();
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(!dataSnapshot.hasChild(current_user_id))
{
sendUserToSetupActivity();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
private void sendUserToProjectActivity()
{
Intent addNewProjectIntent = new Intent(MainActivity.this , ProjectActivity.class);
startActivity(addNewProjectIntent);
}
private void sendUserToSetupActivity()
{
Intent setupIntent= new Intent(MainActivity.this , SetupActivity.class);
setupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(setupIntent);
finish();
}
@Override
protected void onStop() {
super.onStop();
updateUserStatus("offline");
}
@Override
protected void onDestroy() {
super.onDestroy();
updateUserStatus("offline");
}
private void sendUserToLoginActivity()
{
Intent loginIntent= new Intent(MainActivity.this , LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
finish();
}
private void sendUserToSettingsActivity()
{
Intent loginIntent= new Intent(MainActivity.this , SettingsActivity.class);
startActivity(loginIntent);
}
private void sendUserToProfileActivity()
{
Intent profileIntent= new Intent(MainActivity.this , ProfileActivity.class);
startActivity(profileIntent);
}
private void sendUserToFindFriendsActivity()
{
Intent profileIntent= new Intent(MainActivity.this , FindFriendsActivity.class);
startActivity(profileIntent);
}
private void sendUserToFriendsActivity()
{
Intent friendsIntent= new Intent(MainActivity.this , FriendsActivity.class);
startActivity(friendsIntent);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (actionBarDrawerToggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
private void user_menu_selector(MenuItem item) {
switch (item.getItemId()){
case R.id.nav_project:
sendUserToProjectActivity();
break;
case R.id.nav_profile:
sendUserToProfileActivity();
break;
case R.id.nav_home:
Toast.makeText(this, "it is working", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_friends:
sendUserToFriendsActivity();
break;
case R.id.nav_find_friends:
sendUserToFindFriendsActivity();
break;
case R.id.nav_messages:
sendUserToFriendsActivity();
break;
case R.id.nav_settings:
sendUserToSettingsActivity();
break;
case R.id.nav_logout:
updateUserStatus("offline");
sendUserToLoginActivity();
mAuth.signOut();
break;
}
}
}
this reloads again and again in logcat
2020-07-27 12:09:42.770 2626-5215/? I/ActivityManager: START u0 {cmp=com.codewithosama.socialapp/.MainActivity} from uid 10174
2020-07-27 12:09:42.771 2626-5215/? W/ActivityManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.codewithosama.socialapp/.MainActivity }
2020-07-27 12:09:42.812 2626-3376/? W/NotificationService: Toast already killed. pkg=com.codewithosama.socialapp callback=android.app.ITransientNotification$Stub$Proxy@851e89a
2020-07-27 12:09:42.917 6802-6802/com.codewithosama.socialapp W/ActionBarDrawerToggle: DrawerToggle may not show up because NavigationIcon is not visible. You may need to call actionbar.setDisplayHomeAsUpEnabled(true);
2020-07-27 12:09:42.978 818-818/? D/SurfaceFlinger: duplicate layer name: changing com.codewithosama.socialapp/com.codewithosama.socialapp.MainActivity to com.codewithosama.socialapp/com.codewithosama.socialapp.MainActivity#1
2020-07-27 12:09:43.033 2626-3045/? I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher3/.CustomizationPanelLauncher (has extras)} from uid 1000
2020-07-27 12:09:43.042 3274-3274/? I/GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
2020-07-27 12:09:43.042 3274-3274/? I/GoogleInputMethod: onStartInput() : Dummy InputConnection bound
答案1
得分: 0
我可能是错的,但在日志中出现了以下内容:
W/ActivityManager:从非活动上下文调用startActivity;针对Intent强制使用Intent.FLAG_ACTIVITY_NEW_TASK:Intent { cmp = com.codewithosama.socialapp / .MainActivity }
请检查是否在AndroidManifest.xml中的MainActivity下有android:launchMode="singleTop"
。
请舍弃/删除launchMode。
关于此事请向我进行更新。
英文:
I might be wrong but as coming in the logs-
W/ActivityManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.codewithosama.socialapp/.MainActivity }
check if you have android:launchMode="singleTop"
under MainActivity in AndroidManifest.xml
Discard/Delete the launchMode.
Please Update me about it as well.
专注分享java语言的经验与见解,让所有开发者获益!
评论