我想在两个活动之间传递数据。在第一个活动中,我使用此代码:
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>
答案 0 :(得分:2)
如果您指出代码的哪一行(第24行,根据logcat)导致问题,这将有所帮助。我的猜测是你没有找到其中一个视图museum_item_text
或museum_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