0

ユーザーが 2 番目のアクティビティを開始できるアクティビティがあります。2 番目のアクティビティには、配列リストに追加するアイテムのリストがあります。前のアクティビティに戻ったら、配列リストのサイズを表示したいと思います。

ただし、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();
}

2 番目のアクティビティの 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

startActivityForResult2番目のアクティビティを開始するときに、代わりに確認することをお勧めします。これにより、2番目のアクティビティで結果を最初のアクティビティに戻すことができます。これについては、アクティビティのドキュメント、特にドキュメントの「アクティビティの開始と結果の取得」セクションで確認できます。

編集:コードの外観から、2番目のアクティビティからバンドルを保存して最初のアクティビティに送り返すことは何もしていません。Bundleしたがって、最初のアクティビティで適切なデータを取得することはできません。提案されているようにstartActivityForResult、で2番目のアクティビティを開始することを検討してください。これにより、データを最初のアクティビティに簡単に戻すことができます。

于 2012-12-11T21:30:05.000 に答える
0

Androidのライフサイクルに従って呼び出さonResume()れるため、使用する前にデータがnullでないことを確認する必要があります。onCreate()

`if(intentData != null)

//do something`
于 2012-12-11T21:34:23.207 に答える
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 に答える