samedi 21 mars 2015

Cannot delete a row from sqlite database

I am having problem in deleting a movie from my database. I tried to follow tutorials from youtube and through ebooks but that didnt helped me a lot. Here i have done the full coding of my deletemovie


THis is my deleteMovie().java code:



public class DeleteMovie extends Activity{

DatabaseHandler dh;
private static final String ROW_ID = "row_id";
//private static final long rowid = Long.parseLong(ROW_ID);


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deletemoviemenu);
ListView movieList = (ListView)findViewById(R.id.listViewDeleteMovie);
openDB();
populateListViewFromDB();
//registerListClickCallback();
movieList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

Intent i = new Intent();
i.putExtra(ROW_ID, arg3);
deleteMovie();


}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
closeDB();
}

private void openDB() {
dh = new DatabaseHandler(this);
dh.open();
}
private void closeDB() {
dh.close();
}

private void populateListViewFromDB() {
Cursor cursor = dh.getAllRows();

// Allow activity to manage lifetime of the cursor.
// DEPRECATED! Runs on the UI thread, OK for small/short queries.
startManagingCursor(cursor);

// Setup mapping from cursor to view fields:
String[] fromFieldNames = new String[]
{dh.KEY_KEY, dh.KEY_TITLE};
int[] toViewIDs = new int[]
{R.id.textViewiddelete, R.id.textViewtitledelete};

// Create adapter to may columns of the DB onto elemesnt in the UI.
SimpleCursorAdapter myCursorAdapter =
new SimpleCursorAdapter(
this, // Context
R.layout.deleterow, // Row layout template
cursor, // cursor (set of DB records to map)
fromFieldNames, // DB Column names
toViewIDs // View IDs to put information in
);

// Set the adapter for the list view
ListView movieList = (ListView) findViewById(R.id.listViewDeleteMovie);
movieList.setAdapter(myCursorAdapter);
}

private void deleteMovie(){
AlertDialog.Builder builder = new AlertDialog.Builder(DeleteMovie.this);
builder.setTitle("Are you sure wanna delete?");
builder.setTitle("Wanna delete ah??");

builder.setPositiveButton("Delete pannuda", new DialogInterface.OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
AsyncTask<Long, Object, Object>deleteMovie = new AsyncTask<Long, Object, Object>(){
public long idInDB;
@Override
protected Object doInBackground(Long... params){
//dh.getRow(params[0]);
Cursor cursor = dh.getRow(idInDB);
if (cursor.moveToFirst()) {
long idDB = cursor.getLong(dh.COL_ROWID);
dh.deleteRow(params[0]);

}
return null;
}

@Override
protected void onPostExecute(Object result){
finish();
}
};
long rowid = Long.parseLong(ROW_ID);
deleteMovie.execute(new Long[] {rowid});
}
}
);

builder.setNegativeButton("Cancel pannuda", null);
builder.show();

}

private void displayToastForId(long idInDB) {
Cursor cursor = dh.getRow(idInDB);
if (cursor.moveToFirst()) {
long idDB = cursor.getLong(dh.COL_ROWID);
String mvkey = cursor.getString(dh.COL_KEY);
String mvtitle = cursor.getString(dh.COL_TITLE);
//String favColour = cursor.getString(DBAdapter.COL_FAVCOLOUR);

String message = "ID: " + idDB + "\n"
+ "Name: " + mvtitle + "\n"
+ "Key#: " + mvkey;
//+ "FavColour: " + favColour;
Toast.makeText(DeleteMovie.this, message, Toast.LENGTH_LONG).show();
}
cursor.close();
}
}


The error message which I am getting on my logcat:



java.lang.NumberFormatException: Invalid long: "row_id"
at java.lang.Long.invalidLong(Long.java:125)
com.example.moviemanager.DeleteMovie$2.onClick(DeleteMovie.java:120)


Can i know how can i solve this error. THank you.


Aucun commentaire:

Enregistrer un commentaire