2011-09-28 53 views
2

我想刪除數據庫表中的一行 我使用listview和longclick listitem後,你會得到alert對話框,顯示編輯和刪除方法 當我點擊編輯方法的模擬器去罰款,但是當我點擊刪除方法,來力閉合通知,.IM新到Android編程, 你能解釋一下什麼是我的代碼 的問題,這是我的數據庫助手代碼 :在android sqlite表中刪除一行

import android.content.Context; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 

class PuraHelper extends SQLiteOpenHelper { 

private SQLiteDatabase db; 
public final String TABLE_NAME = "pura"; 
public final String TABLE_ROW_ID = "_id"; 
public final String NAMA_PURA = "nama_pura"; 
public final String KABUPATEN = "kabupaten"; 
public final String JALAN = "jalan"; 
public final String LONGITUDE = "longitude"; 
public final String LATITUDE = "latitude"; 
public final String KETERANGAN = "keterangan"; 

private static final String DATABASE_NAME="PPB.db"; 
private static final int SCHEMA_VERSION=1; 

public PuraHelper(Context context) { 
    super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CreateTablePura="create table"+TABLE_ROW_ID+"INTEGER PRIMARY KEY AUTOINCREMENT,"+ NAMA_PURA + "TEXT," + KABUPATEN + "TEXT,"+ JALAN + "TEXT," +LONGITUDE + "TEXT," + LATITUDE + "TEXT," + KETERANGAN + "TEXT"; 
    db.execSQL(CreateTablePura); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // no-op, since will not be called until 2nd schema 
    // version exists 
} 

public Cursor getAll() { 
    String SelectAll = "SELECT _id, nama_pura, kabupaten, jalan, longitude, latitude, keterangan FROM pura ORDER BY nama_pura"; 
    return(getReadableDatabase() 
        .rawQuery(SelectAll, 
          null)); 
} 

public Cursor getById(String id) { 
    String SelectById = "SELECT _id, nama_pura, kabupaten, jalan, longitude, latitude, keterangan FROM pura WHERE _ID=?"; 
    String[] args={id}; 
    return(getReadableDatabase() 
        .rawQuery(SelectById, args)); 
} 

public void insert(String nama_pura, String kabupaten, String jalan, String longitude, String latitude, String keterangan) { 
    ContentValues cv=new ContentValues(); 

    cv.put("nama_pura", nama_pura); 
    cv.put("kabupaten", kabupaten); 
    cv.put("jalan", jalan); 
    cv.put("longitude", longitude); 
    cv.put("latitude", latitude); 
    cv.put("keterangan", keterangan); 
    getWritableDatabase().insert("pura", "nama", cv); 
} 

public void update(String id, String nama_pura, String kabupaten, String jalan, String longitude, String latitude, String keterangan) { 
    ContentValues cv=new ContentValues(); 
    String[] args={id}; 

    cv.put("nama_pura", nama_pura); 
    cv.put("kabupaten", kabupaten); 
    cv.put("jalan", jalan); 
    cv.put("longitude", longitude); 
    cv.put("latitude", latitude); 
    cv.put("keterangan", keterangan); 
    getWritableDatabase().update("pura", cv, "_ID=?", args); 
} 

public void deleteRow(long rowId) 
{ 
    // ask the database manager to delete the row of given id 
    //db.delete(TABLE_NAME, TABLE_ROW_ID + "=" + rowId, null); 

    db.delete(TABLE_NAME, TABLE_ROW_ID + "="+rowId,null); 

} 


public String getId(Cursor c) { 
    return(c.getString(0)); 
} 
public String getNama(Cursor c) { 
    return(c.getString(1)); 
} 
public String getKab(Cursor c) { 
    return(c.getString(2)); 
} 
public String getJalan(Cursor c) { 
    return(c.getString(3)); 
} 
public String getLong(Cursor c) { 
    return(c.getString(4)); 
} 
public String getLat(Cursor c) { 
    return(c.getString(5)); 
} 
public String getKet(Cursor c) { 
    return(c.getString(6)); 
} 

對於我的java類:

import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.CursorAdapter; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemLongClickListener; 

public class db_list extends ListActivity { 

protected static final String ID_EXTRA = "com.jigler.ppb._ID"; 
PuraHelper helper=null; 
Cursor model=null; 
PuraAdapter adapter=null; 

EditText etNama, etKabupaten,etJalan, etLong, etLat, etKeterangan; 
Button  bSave, bCancel; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab_list); 

    helper=new PuraHelper(this); 

    etNama = (EditText)findViewById(R.id.etNama); 
    etKabupaten = (EditText)findViewById(R.id.etKabupaten); 
    etJalan = (EditText)findViewById(R.id.etJalan); 
    etLong = (EditText)findViewById(R.id.etLong); 
    etLat = (EditText)findViewById(R.id.etLat); 
    etKeterangan = (EditText)findViewById(R.id.etKeterangan); 

    model=helper.getAll(); 
    startManagingCursor(model); 
    adapter=new PuraAdapter(model); 
    setListAdapter(adapter); 

    ListView lv = getListView(); 
    lv.setLongClickable(true); 
    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> list, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 
      alert_editlist(id); 
      return true; 
     }   
    }); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    helper.close(); 
} 

@Override 
public void onListItemClick(ListView list, View view, int position, long id) { 
    Intent i=new Intent(db_list.this, db_new_man.class); 

    i.putExtra(ID_EXTRA, String.valueOf(id)); 
    startActivity(i); 
} 

private void alert_editlist(final long id) { 
    // TODO Auto-generated method stub 
    final CharSequence[] items = {"Edit", "Delete"}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("What do you want to do?"); 
    builder.setIcon(R.drawable.ic_setting_36); 
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 

      if (items[item]=="Edit") { 
       Intent i=new Intent(db_list.this, db_new_man.class); 
       i.putExtra(ID_EXTRA, String.valueOf(id)); 
       startActivity(i); 
      } 
      else if(items[item]=="Delete"){ 
            //this is where my app force close 
       helper.deleteRow(id); 
       model.requery(); 
      } 
      finish(); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    new MenuInflater(this).inflate(R.menu.option, menu); 
    return(super.onCreateOptionsMenu(menu)); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId()==R.id.add) { 
     //startActivity(new Intent(db_list.this, db_new.class)); 
     alert_db_new(); 
     return(true); 
    } 
    return(super.onOptionsItemSelected(item)); 
} 

private void alert_db_new() { 
    // TODO Auto-generated method stub 
    final CharSequence[] items = {"Auto", "Manual"}; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Use Your Configuration Setting By"); 
    builder.setIcon(R.drawable.ic_setting_36); 
    builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 

      if (items[item]=="Auto") { 
       startActivity(new Intent(db_list.this, db_new_auto.class)); 
      } 
      else if(items[item]=="Manual"){ 
       startActivity(new Intent(db_list.this, db_new_man.class)); 
      } 
      finish(); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 



/* 
private View.OnClickListener onSave=new View.OnClickListener() { 
    public void onClick(View v) { 
     helper.insert 
     (
       etNama.getText().toString(), 
       etKabupaten.getText().toString(), 
       etJalan.getText().toString(), 
       etLong.getText().toString(), 
       etLat.getText().toString(), 
       etKeterangan.getText().toString() 
     ); 
     model.requery(); 

    } 
}; 
*/ 

class PuraAdapter extends CursorAdapter { 
    PuraAdapter(Cursor c) { 
     super(db_list.this, c); 
    } 
    @Override 
    public void bindView(View row, Context ctxt, Cursor c) { 
     // TODO Auto-generated method stub 
     PuraHolder holder=(PuraHolder)row.getTag(); 

     holder.populateFrom(c, helper); 
    } 

    @Override 
    public View newView(Context ctxt, Cursor c, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater=getLayoutInflater(); 
     View row=inflater.inflate(R.layout.row, parent, false); 
     PuraHolder holder=new PuraHolder(row); 

     row.setTag(holder); 

     return(row); 
    } 
} 
static class PuraHolder { 
    private TextView nama=null; 
    private TextView alamat=null; 
    private ImageView icon=null; 

    PuraHolder(View row) { 
     nama=(TextView)row.findViewById(R.id.nama_pura); 
     alamat=(TextView)row.findViewById(R.id.jalan); 
     icon=(ImageView)row.findViewById(R.id.icon_pura); 
    } 

    void populateFrom(Cursor c, PuraHelper helper) { 
     nama.setText(helper.getNama(c)); 
     alamat.setText(helper.getJalan(c)); 
     icon.setImageResource(R.id.icon_pura); 
    } 
} 

} 

,謝謝你的關注

+0

發佈由logcat生成的異常日誌。另外我注意到你正在使用一個警告對話框來提示用戶進行一個操作,你應該查看http://developer.android.com/guide/topics/ui/menus.html。通常上下文菜單對此最好。 – Jack

回答

6

我想你沒有在你的代碼實例「DB」。

使用

getWritableDatabase().delete(TABLE_NAME, TABLE_ROW_ID + "="+rowId,null) 

代替

db.delete(TABLE_NAME, TABLE_ROW_ID + "="+rowId,null) 

可能會有幫助。

+0

thanx阿里...多數民衆贊成在工作。 – mdedewa65

+0

@Ali請看你的代碼格式,以獲得好看的答案。 – Deepak

0

將此設置爲ListView LongClickListener。您也可以嘗試製作像這樣的DBAdapter幫助程序類http://www.devx.com/wireless/Article/40842/1954

private OnItemLongClickListener longClickListener = new OnItemLongClickListener() { 
    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
    final long ITEM = id; 
    // Ask the user if they want to delete 
    AlertDialog.Builder confirmation = new AlertDialog.Builder(view.getContext()); 
    confirmation.setIcon(android.R.drawable.ic_dialog_alert); 
    confirmation.setButton(POSITIVE_BUTTON, "Delete", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    try { 
     db.open(); 
     db.deleteItem(ITEM); 
     updateList(); 
    } catch (Exception ex) { } 
    finally { 
     db.close(); 
    } 
    }); 
    confirmation.setButton(NEGATIVE_BUTTON, "Do nothing", null); 
    confirmation.setButton(NEURTRAL_BUTTON, "Edit", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     Intent intent = new Intent(view.getContext(), EditActivity.class); 
     intent.putExtra(ID_EXTRA, String.valueOf(id)); 
     startActivity(intent); 
    } 
    }); 
    confirmation.show(); 
    return false; 
};