簡體   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