当我使用put / getExtra时,应用程序强制关闭

时间:2011-12-08 19:26:30

标签: android android-intent

我想在两个活动之间传递数据。在第一个活动中,我使用此代码:

public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            switch(position){
         case 0: 


             Intent newActivity = new Intent(museum.this, museum_item.class);
           newActivity.putExtra("TXT_RESOURCE",R.string.infomuseum1);
            newActivity.putExtra("IMG_RESOURCE",R.drawable.infohistory);

            startActivity(newActivity);
             break;

并在第二次使用

 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.museum); 


Bundle extras = getIntent().getExtras();
String textResourceId = extras.getString("TXT_RESOURCE");
int imgResourceId = extras.getInt("IMG_RESOURCE");

TextView museum_item_text = (TextView) findViewById(R.id.museum_item_text);
museum_item_text.setText(textResourceId);


  ImageView museum_item_image = (ImageView) findViewById(R.id.museum_item_image); 
  museum_item_image.setImageResource(imgResourceId);

但我收到错误,我的应用程序强行关闭..我的错误是什么?这是logcat

12-08 19:35:04.905: E/AndroidRuntime(7689): Uncaught handler: thread main exiting due to uncaught exception
12-08 19:35:04.905: E/AndroidRuntime(7689): java.lang.RuntimeException: Unable to start activity ComponentInfo{kostas.menu.heraklion/kostas.menu.heraklion.museum_item}: java.lang.NullPointerException
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.os.Looper.loop(Looper.java:123)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread.main(ActivityThread.java:3948)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at java.lang.reflect.Method.invokeNative(Native Method)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at java.lang.reflect.Method.invoke(Method.java:521)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at dalvik.system.NativeStart.main(Native Method)
12-08 19:35:04.905: E/AndroidRuntime(7689): Caused by: java.lang.NullPointerException
12-08 19:35:04.905: E/AndroidRuntime(7689):     at kostas.menu.heraklion.museum_item.onCreate(museum_item.java:24)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
12-08 19:35:04.905: E/AndroidRuntime(7689):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
12-08 19:35:04.905: E/AndroidRuntime(7689):     ... 11 more

museum_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 <ImageView
        android:id="@+id/museum_item_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
      />
    <TextView
        android:id="@+id/museum_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />



</LinearLayout>

3 个答案:

答案 0 :(得分:2)

如果您指出代码的哪一行(第24行,根据logcat)导致问题,这将有所帮助。我的猜测是你没有找到其中一个视图museum_item_textmuseum_item_image,通过调用findViewById将相应的视图变量设置为null,然后你就得到了下一行的NPE。

答案 1 :(得分:0)

问题出在这一行:

int textResourceId = extras.getInt("TXT_RESOURCE");

您正在将第1个活动中的字符串传递给Intent的附加内容,但是正在尝试将其转换为第2个活动中的int。 Intent的附加内容不包含“TXT_RESOURCE”的int,这就是你得到NullPointerException的原因。

<强>更新

您在setContentView()中使用的布局文件是R.layout.museum,但是,您的文本ID为museum_item_text包含在R.layout.museum_item文件中。

答案 2 :(得分:0)

您使用的是ListView还是其他什么?因为如果muse_item.xml是列表项的布局,那么您的电话会是:

 TextView museum_item_text = (TextView) findViewById(R.id.museum_item_text);

将找不到该视图,因为它正在查看您的主要布局,即museum.xml