2011-06-20 29 views
0

私のアプリではForce Closeを取得しましたが、これを解決する方法はわかりません。問題は、ListActivityを拡張したクラスがあることです。このクラスにはショップのリストがあり、ユーザーはそのショップの1つを選択する必要があります。彼が店を選択せず​​にボタンを押すと、前のクラスが店の名前を期待しているので、私は強制終了になります。このエラーをどうやって捕まえることができますか?ここでリストを選択しないと強制終了しますか?

は店を選択するための私のクラスである:

public class SelectShop extends ListActivity { 

private ListView lv1; 
SimpleCursorAdapter adapter = null; 
Cursor cursor; 
DbAdapter db; 
ImageView iconshop; 

private static final int ADD=Menu.FIRST; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.shopselect); 

    iconshop = (ImageView) findViewById(R.id.iconshop); 
    lv1 = getListView(); 

    DbApplication myApplication = (DbApplication) this.getApplication(); 
    db= myApplication.getDatabaseAdapter(); 

    cursor = db.getAllShops(); 
    startManagingCursor(cursor); 
    if (cursor != null && cursor.moveToFirst()){ 
    adapter = new SimpleCursorAdapter(this, R.layout.shopsrow, cursor, 
      new String[] { DbAdapter.NAME, DbAdapter.ADRESS }, new int[] { 
        R.id.title, R.id.address }); 

    setListAdapter(adapter); 
    }else Toast.makeText(this, 
      "Choose Menu for adding a shop", 
      Toast.LENGTH_LONG).show(); 

    lv1.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 
      Intent j = new Intent(SelectShop.this, 
        com.ShoppingList.NewList.class); 

      Cursor c = (Cursor) parent.getAdapter().getItem(position); 
      j.putExtra("shop", c.getString(c.getColumnIndex(db.NAME))); 
      setResult(RESULT_OK, j); 
      finish(); 
     } 
    }); 
} 
/*Adaugarea meniului Add Shop*/ 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(0, ADD, 0, "Add Shop").setIcon(R.drawable.additem); 
    return true; 
    } 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case ADD: 
     Intent j = new Intent(SelectShop.this, Shops.class); 
     startActivityForResult(j, 0); 
     return true; 
    } 
    return false; 
} 

}

とpreviuosクラスで私はこれを持っている:

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     switch (requestCode) { 
     case 0: { 
      Bundle b = intent.getExtras(); 
      shopselect = b.getString("shop"); 
      shop.setText(shopselect); 
     } 
      break; 
} 
} 

答えて

0

あなたは、リスト内の項目を選択せず​​に前の活動に戻ることができない仕組みを実装する必要があると思います。 onKeyDown()メソッドをオーバーライドし、ユーザーが[戻る]キーを押すと、項目が選択されているかどうかを確認する必要があります。そうでない場合は、警告ダイアログをスローして、続行するために必要なことをユーザーに通知することができます。お役に立てれば!

+0

ありがとうございます。 :) – Gabrielle

+0

あなたは大歓迎です! – Egor

1

あなたはonActivityResultなどにヌル状態をチェックする必要が以下。

if(b != null) 
{ 
    shopselect = b.getString("shop"); shop.setText(shopselect); 
} 
0

結果コードを確認してください。結果コードがActivity.RESULT_OKの場合にのみ、あなたのことをしてください。

関連する問題