我的Android应用程序中有三个活动。活动A,活动B,活动C ..
在Activity A中,我正在进行Json Parsing,我使用Bundles将这些值发送到Activity B并以多种方式处理它。
这是我在活动B中用来获取值的代码。
Intent in = getIntent();
Bundle b = in.getExtras();
/*/----------Future Use ---------------------
String id1 = b.getString("id");
String mc1 = b.getString("machine_code");
------------------------------------------/*/
String di1 = b.getString("di1");
String di2 = b.getString("di2");
String di3 = b.getString("di3");
String di4 = b.getString("di4");
String di5 = b.getString("di5");
String di6 = b.getString("di6");
String di7 = b.getString("di7");
String di8 = b.getString("di8");
在活动B中。我有一个移动到活动C的按钮,在活动C中,我有后退按钮再次移动到活动B.
我的问题是当我从活动C回到B.我的App力突然关闭。
我的logcat错误如下所示。
03-25 11:22:31.699: E/AndroidRuntime(307): Uncaught handler: thread main exiting due to uncaught exception
03-25 11:22:31.719: E/AndroidRuntime(307): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gprs/com.example.gprs.MainActivity}: java.lang.NullPointerException
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.os.Looper.loop(Looper.java:123)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread.main(ActivityThread.java:4363)
03-25 11:22:31.719: E/AndroidRuntime(307): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 11:22:31.719: E/AndroidRuntime(307): at java.lang.reflect.Method.invoke(Method.java:521)
03-25 11:22:31.719: E/AndroidRuntime(307): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-25 11:22:31.719: E/AndroidRuntime(307): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-25 11:22:31.719: E/AndroidRuntime(307): at dalvik.system.NativeStart.main(Native Method)
03-25 11:22:31.719: E/AndroidRuntime(307): Caused by: java.lang.NullPointerException
03-25 11:22:31.719: E/AndroidRuntime(307): at com.example.gprs.MainActivity.onCreate(MainActivity.java:175)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-25 11:22:31.719: E/AndroidRuntime(307): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
03-25 11:22:31.719: E/AndroidRuntime(307): ... 11 more
03-25 11:22:31.760: I/dalvikvm(307): threadid=7: reacting to signal 3
03-25 11:22:31.760: E/dalvikvm(307): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
03-25 11:22:37.569: I/Process(307): Sending signal. PID: 307 SIG: 9
在logcat中,您可以看到MainActivity(活动B)
答案 0 :(得分:1)
这是因为当您从Bundle b = in.getExtras();
返回null
时,Activity B
会返回Activity C
。
首先,您要将bundle
从Activity A
发送到Activity B
,但是当来自Activity C
时,我认为您不会发送bundle
1 {} intent
。因此,当您尝试从String di1 = b.getString("di1");
(捆绑包b)null
时,您将获得NullPointerException
。
在尝试访问bundle
中的Activity B
之前,请先进行 null 检查。
答案 1 :(得分:0)
我回按钮再次转到活动B
你没有关注android app guidlines。根本不应该有后退按钮。我非常确定你的应用程序正在执行intent.getExtras()
答案 2 :(得分:0)
第175行有一个nullpointer异常(在com.example.gprs.MainActivity.onCreate(MainActivity.java:175)
你能发布什么吗?我想这与Bundle有关。您必须在活动B上调用onSaveInstanceState时存储您的值,并在onRestoreInstance状态下读取它,并在尝试使用它之前始终检查您的包是否为空。
答案 3 :(得分:0)
这是因为您的捆绑包为空
bundle b = this.getIntent().getExtras();
if (b!=null) {
// your code
}