当我尝试访问我放入捆绑包中的信息时,为什么我的Android活动强制关闭?

时间:2010-12-11 18:39:15

标签: java android android-intent bundle

我正在写一个Android应用程序。其中一个活动是ListActivity,因此当人选择列表中的项目时,我希望该项目的文本值存储在Intent / Bundle中,以便下一个活动知道该值。我的代码看起来像这样:

lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view,
            int position, long id) {

            Intent intent = new Intent(view.getContext(), FavoriteEditFromDest.class);
            intent.putExtra("com.example.myapp.Name", ((TextView) view).getText());

            startActivity(intent);
        }
      });
    }

要启动的活动的onCreate方法如下所示:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.favorite_dest_edit);

            // nameB is a global string variable defined above.
        nameB = savedInstanceState.getString("com.example.myapp.Name");
    }

当我从ListActivity中的列表中单击某个项目时,它开始执行onCreate代码,但是当它到达尝试检索字符串值的行时,我会得到一个强制关闭对话框。

我没有太多使用Bundle传递信息的经验,所以我将非常感谢所有人的帮助!

3 个答案:

答案 0 :(得分:4)

nameB = savedInstanceState.getString("com.example.myapp.Name");

应替换为

Bundle bundle = getIntent().getExtras();
nameB = bundle.getString("com.example.myapp.Name");

尝试一下,看看它是否有帮助。

答案 1 :(得分:1)

在Eclipse中使用adb logcat,DDMS或DDMS透视图来检查堆栈跟踪并查看触发“强制关闭”的异常。

在这种情况下,我怀疑您会发现您放入Bundle的内容不是String,因为getText()不会返回String。但是,这只是猜测 - 您的堆栈跟踪应该告诉您更多。

答案 2 :(得分:0)

其他问题

intent.putExtra("com.example.myapp.Name", ((TextView) view).getText());

应该是

intent.putExtra("com.example.myapp.Name", ((TextView) view).getText().toString());