我有一个问题,我失去了额外的活动之间。
我正在将一个chatobject从mainactivity回收视图发送到一个chatactivity,它工作正常。
然后,我将同一个chatobject从chatactivity发送到groupsettingsactivity,它也可以正常工作。
我的问题是,当我试图从groupsettingsactivity返回到topappbar home按钮的chatactivity时,我在试图从chatobject获取chatId时遇到了nullpointerexception。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shotgunnot/com.example.shotgunnot.ChatActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.shotgunnot.Chat.ChatObject.getChatId()' on a null object reference
我试过使用onresume和navutils,但我总是会遇到同样的错误,我想这是我生命周期中没有遇到的问题。机器人内置的后导航按钮工作正常。
这是我的主要活动recyclerview适配器
@Override
public void onBindViewHolder(@NonNull final ChatListViewHolder holder, final int position) {
ChatObject data = chatList.get(position);
holder.mTitle.setText(data.getChatId());
holder.mGroup.setText(data.getGroupId());
System.out.println("GroupPic" + data.getGroupPic());
Glide.with(context)
.load(data.getGroupPic())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.ic_group_24dp)
.apply(RequestOptions.circleCropTransform().circleCrop())
.into(holder.mGroupPic);
holder.mLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), ChatActivity.class);
intent.putExtra("chatObject", chatList.get(holder.getBindingAdapterPosition()));
v.getContext().startActivity(intent);
}
});
}
这是聊天活动
public class ChatActivity extends AppCompatActivity {
ChatObject mChatObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
Intent intent = getIntent(); >>
mChatObject = (ChatObject) intent.getSerializableExtra("chatObject");
BottomAppBar bottomAppBar = findViewById(R.id.bottomAppBar);
bottomAppBar.replaceMenu(R.menu.group_menu);
bottomAppBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
Intent intent = new Intent(ChatActivity.this, GroupSettingsActivity.class);
intent.putExtra("chatObject", mChatObject);
startActivity(intent);
return true;
case android.R.id.home:
Intent home = new Intent(getApplicationContext(), MainPageActivity.class);
startActivity(home);
}
return false;
}
});
}
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
mChatObject = (ChatObject) intent.getSerializableExtra("chatObject");
}
}
最后是分组活动
public class GroupSettingsActivity extends AppCompatActivity {
ChatObject mChatObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_settings);
Intent intent = getIntent();
mChatObject = (ChatObject) intent.getSerializableExtra("chatObject");
chatId = mChatObject.getChatId();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, ChatActivity.class);
intent.putExtra("chatObject", mChatObject);
startActivity(intent);
//NavUtils.navigateUpFromSameTask(this);
finish();
default:
return super.onOptionsItemSelected(item);
}
}
任何帮助都将不胜感激。
3条答案
按热度按时间ezykj2lf1#
基于这个答案,我找到了一个使用sharedprefers的解决方法:如何在android上保存/存储sharedpreferences中的对象?
保存首选项
并在oncreate中检索它们
不过,这感觉有点像黑客,所以如果有人有更好的解决方案那就太好了。
谢谢
pxyaymoc2#
在使用第二个活动之前,应该检查到达该活动的值是否与null不同。尝试执行以下操作并设置断点以调试第二个活动中出现的内容:
第一项活动:
第二项活动:
dced5bon3#
在开始之前尝试添加这些标志
ChatActivity
,以清除堆栈并确保正在创建新的ChatActivity
而不是重建一个旧的:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);