Android NullPointerException正在使用捆绑包启动第二个活动

Android NullPointerException正在使用捆绑包启动第二个活动,android,android-intent,parameters,nullpointerexception,bundle,Android,Android Intent,Parameters,Nullpointerexception,Bundle,我有使用谷歌地图的活动,这是点击标记的代码。 如您所见,它使用以下参数启动第二个活动: public void onInfoWindowClick(Marker marker) { SQLiteDatabase dbRead = db.getReadableDatabase(); String[] columns = {"_id", "title", "addr"}; Cursor result = dbRead.query("merchants", columns, n

我有使用谷歌地图的活动,这是点击标记的代码。 如您所见,它使用以下参数启动第二个活动:

public void onInfoWindowClick(Marker marker) {
    SQLiteDatabase dbRead = db.getReadableDatabase();
    String[] columns = {"_id", "title", "addr"};
    Cursor result = dbRead.query("merchants", columns, null, null, null, null, null);
    long id = 0;

    while(result.moveToNext()) {
        if (marker.getTitle().equals(result.getString(1)) && marker.getSnippet().equals(result.getString(2))) {
            id = result.getLong(0);
        }
    }

    Intent intent = new Intent(this, ViewMerchant.class);
    Bundle b = new Bundle();
    b.putInt("id", (int)id);
    startActivity(intent);
}
这是第二项活动代码的一部分:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewmerchant);

    Bundle b = getIntent().getExtras();
    int id = b.getInt("id");

    ...
}
这是LogCat:

05-18 19:05:34.785: D/AndroidRuntime(28444): Shutting down VM
05-18 19:05:34.785: W/dalvikvm(28444): threadid=1: thread exiting with uncaught exception (group=0x419317c0)
05-18 19:05:34.790: E/AndroidRuntime(28444): FATAL EXCEPTION: main
05-18 19:05:34.790: E/AndroidRuntime(28444): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bpem/com.example.bpem.ViewMerchant}: java.lang.NullPointerException
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread.access$600(ActivityThread.java:153)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.os.Looper.loop(Looper.java:137)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread.main(ActivityThread.java:5289)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at java.lang.reflect.Method.invokeNative(Native Method)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at java.lang.reflect.Method.invoke(Method.java:525)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at dalvik.system.NativeStart.main(Native Method)
05-18 19:05:34.790: E/AndroidRuntime(28444): Caused by: java.lang.NullPointerException
05-18 19:05:34.790: E/AndroidRuntime(28444):    at com.example.bpem.ViewMerchant.onCreate(ViewMerchant.java:28)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.Activity.performCreate(Activity.java:5133)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-18 19:05:34.790: E/AndroidRuntime(28444):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293)
05-18 19:05:34.790: E/AndroidRuntime(28444):    ... 11 more
如果在第二个活动中,我对此行进行了注释

int id = b.getInt("id");

然后它就可以正常工作了。那么getId有什么问题吗?

您必须向intent对象提供bundle

startActivity
之前:

Bundle b = new Bundle();
b.putInt("id", (int)id);
intent.putExtras(b);
startActivity(intent);

您必须向intent对象提供bundle

startActivity
之前:

Bundle b = new Bundle();
b.putInt("id", (int)id);
intent.putExtras(b);
startActivity(intent);

更改
b.putInt(“id”,(int)id)
intent.putExtra(“id”,(int)id)我选中了b,结果为空。为什么?试试我的第一条评论…@smartmouseI尝试了第一个答案的解决方案,我解决了这个问题。但是现在我得到了一个新的错误,请看一下我在第一个答案中的评论。谢谢。更改
b.putInt(“id”,(int)id)
intent.putExtra(“id”,(int)id)我选中了b,结果为空。为什么?试试我的第一条评论…@smartmouseI尝试了第一个答案的解决方案,我解决了这个问题。但是现在我得到了一个新的错误,请看一下我在第一个答案中的评论。谢谢。我现在有一个新错误:第一个活动send id变量的值为“2561503679”,但在第二个活动中id的值为“-1733463617”。这就是逻辑:使用putLong/getLong而不是putin/getInt,当然不要在int处强制转换,否则在获得意图的同时在oncreate中进行健全性检查是一种很好的做法。像这样。束b;如果((b=getIntent().getExtras())!=null){//now safe}我现在有一个新错误:第一个活动send id变量的值为“2561503679”,但在第二个活动中id的值为“-1733463617”。这就是逻辑:使用putLong/getLong而不是putin/getInt,当然不要在int处强制转换,否则在获得意图的同时在oncreate中进行健全性检查是一种很好的做法。像这样。束b;如果((b=getIntent().getExtras())!=null){//now safe}