首页 > 解决方案 > 在选项卡布局/片段中切换时 Android 应用程序崩溃

问题描述

我是 Android 开发的新手,我遇到了问题。我的应用程序就像崩溃一样,我有 2 个活动,分别是 Home 和 Main,主要活动有 4 个片段,当我从第一个切换到第二个时它正在工作,但是当我切换到第三个和/或第四个时,应用程序正在返回我的家庭活动,但应用程序没有抛出错误,所以基本上我对正在发生的事情一无所知。

我在我的第 4 个选项卡/片段中填充了一个 RecyclerView,这是我不明白的,如果数据库中的表为空或没有任何内容可以放入 RecyclerView,则选项卡正在工作,我可以切换 4 个片段中的任何一个,但如果数据库有一个值来抛出填充 RecyclerView,当问题发生时它会返回 Home Activity,就像崩溃但它不会关闭应用程序

主要活动

    if (mAuth.getCurrentUser() != null) {

        mUserRef = FirebaseDatabase.getInstance().getReference().child("Users").child(mAuth.getCurrentUser().getUid());

    }


    //TABS
    mViewPager = (ViewPager) findViewById(R.id.main_tabPager);
    mSectionsPagerAdapter= new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager.setAdapter(mSectionsPagerAdapter);

    mTabLayout = (TabLayout) findViewById(R.id.mainTabs);
    mTabLayout.setupWithViewPager(mViewPager);

}

@Override
protected void onResume() {
    super.onResume();
    FirebaseUser currentUser = mAuth.getCurrentUser();

    if(currentUser == null)
    {
        sendToStart();
    }
    else
    {
        mUserRef.child("online").setValue(true);
    }
}

@Override
protected void onPause() {
    super.onPause();
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if(currentUser != null) {

        mUserRef.child("online").setValue(ServerValue.TIMESTAMP);

    }
}


private void sendToStart()
{
    Intent startIntent = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(startIntent);
    finish();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.main_menu, menu);

    return true;
}

第 4 个片段

public FriendsFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mMainView = inflater.inflate(R.layout.fragment_friends, container, false);

    mFriendsList = (RecyclerView) mMainView.findViewById(R.id.friends_list);
    mAuth = FirebaseAuth.getInstance();

    mCurrent_user_id = mAuth.getCurrentUser().getUid();

    mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
    mFriendsDatabase.keepSynced(true);
    mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
    mUsersDatabase.keepSynced(true);

    //mFriendsList.setHasFixedSize(true);
    mFriendsList.setLayoutManager(new LinearLayoutManager(getContext()));

    return mMainView;
}

@Override
public void onStart() {
    super.onStart();

    FirebaseRecyclerAdapter<Friends, FriendsViewHolder> friendsRecyclerViewAdapter = new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>(

            Friends.class,
            R.layout.users_single_layout,
            FriendsViewHolder.class,
            mFriendsDatabase


    ) {
        @Override
        protected void populateViewHolder(final FriendsViewHolder friendsViewHolder, Friends friends, int i) {

            friendsViewHolder.setDate(friends.getDate());

            final String list_user_id = getRef(i).getKey();

            mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    final String userName = dataSnapshot.child("name").getValue().toString();
                    String userThumb = dataSnapshot.child("thumb_image").getValue().toString();

                    if(dataSnapshot.hasChild("online")) {

                        String userOnline = dataSnapshot.child("online").getValue().toString();
                        friendsViewHolder.setUserOnline(userOnline);

                    }

                    friendsViewHolder.setName(userName);
                    friendsViewHolder.setUserImage(userThumb, getContext());

                    friendsViewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {

                            CharSequence options[] = new CharSequence[]{"Open Profile", "Send message"};

                            final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

                            builder.setTitle("Select Options");
                            builder.setItems(options, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {

                                    //Click Event for each item.
                                    if(i == 0){

                                        Intent profileIntent = new Intent(getContext(), ProfileActivity.class);
                                        profileIntent.putExtra("user_id", list_user_id);
                                        startActivity(profileIntent);

                                    }

                                    if(i == 1){

                                        Intent chatIntent = new Intent(getContext(), Home.class);
                                        chatIntent.putExtra("user_id", list_user_id);
                                        chatIntent.putExtra("user_name", userName);
                                        startActivity(chatIntent);

                                    }

                                }
                            });

                            builder.show();

                        }
                    });


                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }
    };

    mFriendsList.setAdapter(friendsRecyclerViewAdapter);

已编辑..我在 logcat 上查找并在我的“包名称(DEAD)”上找到了这个,单击这是错误后,我删除了 SectionsAdapter,因为错误来自片段。

java.lang.NullPointerException: Attempt to invoke virtual method 
'android.view.View android.view.View.findViewById(int)' on a null object 
reference
    at 
 com.example.gab.quadrantms.FriendsFragment$FriendsViewHolder
.setDate(FriendsFragment.java:177)
    at 
 com.example.gab.quadrantms.FriendsFragment$1.populateViewHolder
(FriendsFragment.java:89)
    at com.example.gab.quadrantms.FriendsFragment$1.populateViewHolder
(FriendsFragment.java:85)

还有这种错误吗?

11-03 02:27:09.593 27447-27447/com.example.gab.quadrantms 
E/MemoryLeakMonitorManager: MemoryLeakMonitor.jar is not exist!

标签: javaandroidfirebaseandroid-fragmentsandroid-recyclerview

解决方案


推荐阅读