2016-04-29 5 views
0

どこが間違っているのか分かりません。私のリストビューをクリックすると、行を削除した後、アプリケーションは終了します。以下は、私のソースコードです:アンドロイドアプリで行を削除した後のカーソル例外

private void showlist() { 

    ArrayList<ContactListItems> contactList = new ArrayList<ContactListItems>(); 
    contactList.clear(); 
    mydb = new DBHelper(this); 
    String query = "SELECT * FROM DBbooking "; 
    Cursor c1 = mydb.selectQuery(query); 
    if (c1 != null && c1.getCount() != 0) { 
     if (c1.moveToFirst()) { 
      do { 
       ContactListItems contactListItems = new ContactListItems(); 

       contactListItems.setSlno(c1.getString(c1 
         .getColumnIndex("id"))); 
       contactListItems.setName(c1.getString(c1 
         .getColumnIndex("Firstname"))); 
       contactListItems.setPhone(c1.getString(c1 
         .getColumnIndex("Lastname"))); 
       contactList.add(contactListItems); 

      } while (c1.moveToNext()); 
     } 
    } 
    c1.close(); 

    ContactListAdapter contactListAdapter = new ContactListAdapter(
      Bookings.this, contactList); 
    lvCustomList.setAdapter(contactListAdapter); 

    lvCustomList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      // int id_To_Search = arg2; 

      Bundle dataBundle = new Bundle(); 
      dataBundle.putInt("id", arg2); 

      Intent intent = new Intent(getApplicationContext(), Details.class); 

      intent.putExtras(dataBundle); 
      startActivity(intent); 
     } 
    }); 

クリックされた項目に ます。public void dislplaybookingsを見てコードの一部()

と呼ば削除

public Cursor getData(int id){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor res = db.rawQuery("select * from DBbooking where id="+id+"", null); 
    return res; 
} 

選択のための{

Bundle extras = getIntent().getExtras(); 


    int passedvaluefromformeractivity = extras.getInt("id"); 
    int realvalue = passedvaluefromformeractivity+1 ; 
    mydb = new DBHelper(this); 


Cursor rs = mydb.getData(realvalue); 

rs.moveToFirst(); 
String trn = rs.getString(1); 
Firstname.setText((CharSequence) trn); 
Firstname.setFocusable(false); 
Firstname.setClickable(false); 

myDBHelpe

public void deletdata(){ 
    mydb = new DBHelper(this); 
    String trnid= "" + Trans_ID.getText(); 
    mydb.deleteTitle(trnid); 
    Toast.makeText(Details.this, "Deleted", Toast.LENGTH_LONG).show(); 
    Intent intent = new Intent(getApplicationContext(),Bookings.class); 
    startActivity(intent); 
} 

削除

public boolean deleteTitle(String TransID) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    return db.delete(DBbooking_TABLE_NAME, DBbooking_COLUMN_TRANS_ID + "=" + TransID, null) > 0; 
} 

私のlogcat。

FATAL EXCEPTION: main E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity android.database.CursorIndexOutOfBoundsException: Index 0  requested, with a size  of 0 

私は、初心者のために、任意の行

+0

'E /何かで始まるあなたのlogcatでより多くのエラー行があるはずです:SomeError' は、メインポストにそれらを編集してください。 –

答えて

0

を削除した後、私のアプリが出ていない作るのを助けるあなたがshowlist()

また
Cursor rs = mydb.getData(realvalue); 

if (rs != null && rs.getCount() != 0){ 
    rs.moveToFirst(); 
    String trn = rs.getString(1); 
    Firstname.setText((CharSequence) trn); 
    Firstname.setFocusable(false); 
    Firstname.setClickable(false); 
} 

に行ったようrsカーソルが何かを返されたかどうかを確認必要がありますしてくださいあなたは実際に削除をどこで実行していますか?

+0

上記のコードブロックを追加したばかりで、まだ以下のエラーがあります。アクティビティを開始できませんComponentInfo {gstuntz.splashscreen/gstuntz.splashscreen.Details}:android.database.CursorIndexOutOfBoundsException:0のサイズでインデックス-1が要求されました –

+0

これは何かをする前に有効なカーソルがあることを確認することでした。削除を実行する場所にコードを投稿できますか? –

+0

public void deletdata(){ mydb = new DBHelper(this); 文字列trnid = "" + Trans_ID.getText(); mydb.deleteTitle(trnid); Toast.makeText(詳細、 "削除済み"、Toast.LENGTH_LONG).show(); 意図インテント=新しいインテント(getApplicationContext()、Bookings.class); startActivity(インテント); } –

0

ありがとうサミーT..私は衣装アダプターを使用して問題を解決することができました。 以下。

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

      String tx2 = ((TextView)arg1.findViewById(R.id.tv_slno)).getText().toString(); 


      Intent i = new Intent(Bookings.this, Details.class); 
      i.putExtra("t2", tx2); 
      startActivity(i); 

     } 
+0

ここで、tv_slnoはカスタムアダプターで作成されたテキストビューのIDです。 –

+0

それは素晴らしいです。後で解決されたように答えを記入することを忘れないでください。 –

関連する問題