当我将用户导向另一个页面时,它会不断重新加载,无限次数地。

huangapple 未分类评论53阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2020年7月27日 14:51:45
  • 转载请务必保留本文链接:https://java.coder-hub.com/63110089.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定