java - 在选项卡布局/片段中切换时 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!
解决方案
推荐阅读
- osgi - 当节点被隔离时,Opendaylight OSGI 系统包自动关闭
- c# - 遍历列表以在 TreeView 中显示
- haskell - Haskell 中的树上的地图
- haskell - 如何判断一个数字是否是一个带有递归的平方数?
- mvvm - 使用 xamforms.controls.calendar 构建日历活动
- python - XPath 语句未按预期解析
- c# - 使用反射调用泛型方法
- python - 将 txt 中的值添加到 csv 新列
- c - 预处理器在声明 unsigned int x 并使用二进制常量初始化时进行编译
- javascript - 从 html 脚本加载 .js 文件时出现 404 错误