public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
public boolean onContextItemSelected(MenuItem item) {
//AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
//String[] names = getResources().getStringArray(R.array.names);
switch(item.getItemId())
{
case R.id.viewData:
{ Intent r=new Intent(Database.this,MainMenu.class);
startActivity(r);
return true;
}
case R.id.DelData:
{
AdapterView.AdapterContextMenuInfo info1=
(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
delete(info1.id);
return true;
}
}
return(super.onOptionsItemSelected(item));
}
private void delete(final long rowId) {
if (rowId>0) {
new AlertDialog.Builder(this)
.setTitle(R.string.delete_title)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
processDelete(rowId);
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// ignore, just dismiss
}
})
.show();
}
}
private void processDelete(long rowId) {
String[] args={String.valueOf(rowId)};
//DatabaseHelper dbh = new DatabaseHelper(this);
dbh.getWritableDatabase().delete("mygrades", "_ID=?", args);
c.requery();
}
Ich lösche gerade Zeilen aus einer Datenbank, in der der Tabellenname mygrades ist. Es gibt ein contextMenu, in dem ich zwei Optionen anzeigen und löschen kann. Wenn ich delete drücke, stoppt das Programm. Das Fehlerprotokoll besagt, dass ich ein Problem mit processDelete (long rowId) habe. Sind meine Argumente richtig? Ich werde das Fehlerprotokoll unten schreiben: -Löschen von Zeilen aus einem Datenbankproblem
04-02 03:38:29.450: W/dalvikvm(541): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
04-02 03:38:29.489: E/AndroidRuntime(541): FATAL EXCEPTION: main
04-02 03:38:29.489: E/AndroidRuntime(541): java.lang.NullPointerException
04-02 03:38:29.489: E/AndroidRuntime(541): at nidhin.survey.Database.processDelete(Database.java:139)
04-02 03:38:29.489: E/AndroidRuntime(541): at nidhin.survey.Database.access$0(Database.java:135)
04-02 03:38:29.489: E/AndroidRuntime(541): at nidhin.survey.Database$1.onClick(Database.java:121)
04-02 03:38:29.489: E/AndroidRuntime(541): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
04-02 03:38:29.489: E/AndroidRuntime(541): at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 03:38:29.489: E/AndroidRuntime(541): at android.os.Looper.loop(Looper.java:137)
04-02 03:38:29.489: E/AndroidRuntime(541): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-02 03:38:29.489: E/AndroidRuntime(541): at java.lang.reflect.Method.invokeNative(Native Method)
04-02 03:38:29.489: E/AndroidRuntime(541): at java.lang.reflect.Method.invoke(Method.java:511)
04-02 03:38:29.489: E/AndroidRuntime(541): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-02 03:38:29.489: E/AndroidRuntime(541): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-02 03:38:29.489: E/AndroidRuntime(541): at dalvik.system.NativeStart.main(Native Method)
04-02 03:38:32.388: I/Process(541): Sending signal. PID: 541 SIG: 9
04-02 03:39:09.788: D/dalvikvm(586): GC_FOR_ALLOC freed 66K, 4% free 9065K/9347K, paused 82ms
04-02 03:39:09.788: I/dalvikvm-heap(586): Grow heap (frag case) to 9.452MB for 556016-byte allocation
04-02 03:39:09.930: D/dalvikvm(586): GC_CONCURRENT freed <1K, 4% free 9607K/9927K, paused 5ms+5ms
04-02 03:39:10.259: D/gralloc_goldfish(586): Emulator without GPU emulation detected.
Sie eine Nullpointer auf Linie 139. Versuch haben einige Log-Anweisungen, um zu sehen, warum es null ist. –
Wie mache ich das? meinst du debuggen? –
http://developer.android.com/reference/android/util/Log.html –