繁体   English   中英

onResume在启动时导致问题

[英]onResume causing problems on start up

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

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

的onResume():

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

getIntentData():

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

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

编辑:通过代码的外观 - 您正在做的任何事情都是从第二个活动中存储一个包并将其发送回第一个活动。 因此,您永远不会在第一个活动中获得正确的Bundle数据。 如建议的那样,查看startActivityForResult以启动第二个活动。 这样您就可以轻松地将数据返回到第一个活动中。

但是我遇到了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() 。)

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

`if(intentData != null)

//do something`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM