0

我有一个允许用户开始第二个活动的活动。第二个活动有一个我添加到数组列表中的项目列表。当我返回上一个活动时,我想显示数组列表的大小。

但是我遇到了 onResume() 的问题。它在我的第一个活动创建时被调用,结果生成一个错误,因为数组列表在首次启动时不存在!

onResume():

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    getIntentData();
    calcSubTotal(orderData);
}

获取意图数据():

public void getIntentData(){
    b = new Bundle();
    b = getIntent().getExtras();
    orderData = b.getParcelable("order");
    Toast.makeText(this.getApplicationContext(), orderData.size(), Toast.LENGTH_LONG).show();
}

第二个活动的 onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_starters);
    createTestData();

    b = new Bundle();
    orderData = new MenuItemList();

    adapter = new MenuItemArrayAdapter(this, starters);
    this.setListAdapter(adapter);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    Toast.makeText(this.getApplicationContext(), l.getItemAtPosition(position).toString() + " clicked", Toast.LENGTH_LONG).show();
    //add clicked item to orderData....
    MenuItem m = (MenuItem)l.getItemAtPosition(position);
    //create new item
    orderData.add(m);   
}

知道我如何能够控制它吗?

错误:

java.lang.RuntimeException:无法恢复活动 {com.example.waitronproto3/com.example.waitronproto3.SectionsActivity}:java.lang.NullPointerException

4

3 回答 3

2

我想你可能想看看startActivityForResult,当你开始你的第二个活动时。它将允许您的第二个活动将结果返回给您的第一个活动。您可以在活动文档中阅读它,特别是文档的“开始活动和获取结果”部分。

编辑:从您的代码的外观来看-您所做的任何事情都不是存储来自第二个活动的捆绑包并将其发送回第一个活动。所以你永远不会Bundle在你的第一个活动中得到正确的数据。按照建议,考虑startActivityForResult启动您的第二个活动。这将允许您轻松地将数据返回到您的第一个活动中。

于 2012-12-11T21:30:05.000 回答
0

但是我遇到了 onResume() 的问题。它在我的第一个活动创建时被调用,结果生成一个错误,因为数组列表在首次启动时不存在!

我建议先更改getIntentData()以检查是否存在适当的数据:

public void getIntentData(){
    Intent intent = getIntent();
    if(intent != null && intent.hasExtra("order")) {
        orderData = b.getParcelable("order");
        Toast.makeText(this.getApplicationContext(), orderData.size(), Toast.LENGTH_LONG).show();
        calculateSubTotal(order);
    }
}

并更新onResume()

@Override
protected void onResume() {
    super.onResume();
    getIntentData();
}

(尽管您现在可以简单地getIntentData()输入onResume()。)

于 2012-12-11T21:30:14.110 回答
0

onResume()onCreate()根据Android 生命周期被调用,因此您需要在尝试使用数据之前检查数据是否不为空。

`if(intentData != null)

//do something`
于 2012-12-11T21:34:23.207 回答