【发布时间】:2019-01-09 06:22:24
【问题描述】:
就每个按钮如何处理活动而言?有什么区别?
我有 3 个活动(我们称它们为 A、B 和 C)。 A 是 B 的父级,B 是 C 的父级,并且一个意图需要额外的到下一个活动。我从 A 转到 B,然后从 B 转到 C。当我尝试使用向上按钮返回时,应用程序崩溃,这是因为它试图从 Intent 中的额外信息中获取信息。
但是当我使用后退按钮时,它可以工作 (???) 我不知道为什么。
我尝试使 Up Button 像 Back Button 一样工作,执行以下操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(item);
}
还尝试使用NavUtils.navigateUpFromSameTask(this),但它也不起作用。我该如何解决?
编辑:错误日志
2019-01-09 03:45:43.468 29326-29326/com.jvponte.maosdadasv1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jvponte.maosdadasv1, PID: 29326
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jvponte.maosdadasv1/com.jvponte.maosdadasv1.UserActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.jvponte.maosdadasv1.User.getUsername()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:6568)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.jvponte.maosdadasv1.User.getUsername()' on a null object reference
at com.jvponte.maosdadasv1.UserActivity.onCreate(UserActivity.java:67)
at android.app.Activity.performCreate(Activity.java:7016)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:6568)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
编辑:更多代码
我在活动 B (UserActivity) 的 onCreate() 中有这个。在活动 A 上添加了额外的意图
Intent intent = getIntent();
if(intent.hasExtra("clickedUser")){
mOtherUser = intent.getParcelableExtra("clickedUser");
}
if(intent.hasExtra("loggedUser")){
mLoggedUser = intent.getParcelableExtra("loggedUser");
}
/.../
mUsernameTV.setText(mOtherUser.getUsername());
mUserInfoTV.setText(mOtherUser.getUserInfo());
这里我称之为活动 C (ChatActivity)
Intent intent = new Intent(UserActivity.this, ChatActivity.class);
intent.putExtra("loggedUser", mLoggedUser);
intent.putExtra("clickedUser", mOtherUser);
startActivityForResult(intent, RC_CHAT);
在ChatActivityonCreate()我有这个
Intent intent = getIntent();
if (intent.hasExtra("clickedUser")){
otherUser = intent.getParcelableExtra("clickedUser");
otherUserId = otherUser.getUid();
otherUserName = otherUser.getUsername();
}
if (intent.hasExtra("loggedUser")){
loggedUser = intent.getParcelableExtra("loggedUser");
loggedUserId = loggedUser.getUid();
}
错误可能是未正确管理此已登录用户和其他用户。最奇怪的是,使用后退按钮 WORKS,而将 Up Button 设置为像 Back Button 一样工作却没有
【问题讨论】:
-
当您说它不起作用时,您是否遇到错误?如果有错误,你能分享你的日志吗? :)
-
@Anmol Ye,我收到错误消息。我认为这不会有太大帮助,因为它有点具体。当我启动 B 活动时,我会从 A 中创建的意图中获得额外信息,并从中获取信息。由于我来自活动 C,我认为这个额外的意图信息丢失了,并且我得到了 NullPointerException(我不知道为什么当我使用后退按钮时它不会发生)。无论如何,我会添加日志消息:)
-
这不是后面的问题,不要完成活动,我认为你完成的活动比以前的所有活动都失去了价值,
getUsername()为空。 -
@farhana 我在启动 C 时忘记完成() B 活动。现在它部分工作,但从 C 回到 A(B 是 C 的父级,我仔细检查了它)
-
@JoãoVítor 如果您完成活动,则不要添加finish(),那么您将失去之前活动的所有价值。
标签: android button back-button home-button up-button