Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击“确认”按钮后,应用程序停止并重新启动_Android_Android Alertdialog - Fatal编程技术网

Android 单击“确认”按钮后,应用程序停止并重新启动

Android 单击“确认”按钮后,应用程序停止并重新启动,android,android-alertdialog,Android,Android Alertdialog,我正在Eclipse上进行android开发。应用程序可以执行以下操作: 添加新任务 修改分配 删除分配 现在我遇到的一个问题是,每当我试图删除作业时,应用程序都会在我单击“确认”按钮后立即崩溃 这是logcat: 05-01 06:31:26.772: I/Choreographer(1417): Skipped 36 frames! The application may be doing too much work on its main thread. 05-01 06:31:26

我正在Eclipse上进行android开发。应用程序可以执行以下操作:

  • 添加新任务
  • 修改分配
  • 删除分配
现在我遇到的一个问题是,每当我试图删除作业时,应用程序都会在我单击“确认”按钮后立即崩溃

这是logcat:

05-01 06:31:26.772: I/Choreographer(1417): Skipped 36 frames!  The application may be doing too much work on its main thread.
05-01 06:31:26.912: I/Choreographer(1417): Skipped 30 frames!  The application may be doing too much work on its main thread.
05-01 06:31:37.582: I/Choreographer(1417): Skipped 103 frames!  The application may be doing too much work on its main thread.
05-01 06:31:37.772: I/Choreographer(1417): Skipped 39 frames!  The application may be doing too much work on its main thread.
05-01 06:31:40.232: I/Choreographer(1417): Skipped 58 frames!  The application may be doing too much work on its main thread.
05-01 06:31:40.682: I/Choreographer(1417): Skipped 112 frames!  The application may be doing too much work on its main thread.
05-01 06:31:42.662: D/AndroidRuntime(1417): Shutting down VM
05-01 06:31:42.662: W/dalvikvm(1417): threadid=1: thread exiting with uncaught exception (group=0xb3adeba8)
05-01 06:31:42.682: E/AndroidRuntime(1417): FATAL EXCEPTION: main
05-01 06:31:42.682: E/AndroidRuntime(1417): Process: com.mada.assignmentmanager, PID: 1417
05-01 06:31:42.682: E/AndroidRuntime(1417): java.lang.NullPointerException
05-01 06:31:42.682: E/AndroidRuntime(1417):     at com.mada.assignmentmanager.AssignmentManagerDatabase.deleteAssignment(AssignmentManagerDatabase.java:91)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at com.mada.assignmentmanager.AssignmentManagerView$1.onClick(AssignmentManagerView.java:74)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at android.os.Looper.loop(Looper.java:136)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at android.app.ActivityThread.main(ActivityThread.java:5017)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at java.lang.reflect.Method.invokeNative(Native Method)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at java.lang.reflect.Method.invoke(Method.java:515)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-01 06:31:42.682: E/AndroidRuntime(1417):     at dalvik.system.NativeStart.main(Native Method)
05-01 06:31:42.722: D/dalvikvm(1417): GC_FOR_ALLOC freed 166K, 7% free 3914K/4196K, paused 33ms, total 41ms
05-01 06:31:47.922: I/Process(1417): Sending signal. PID: 1417 SIG: 9
05-01 06:31:49.402: D/dalvikvm(1452): GC_FOR_ALLOC freed 73K, 7% free 2947K/3140K, paused 125ms, total 129ms
05-01 06:31:49.402: I/dalvikvm-heap(1452): Grow heap (frag case) to 3.596MB for 635812-byte allocation
05-01 06:31:49.462: D/dalvikvm(1452): GC_FOR_ALLOC freed 2K, 6% free 3565K/3764K, paused 52ms, total 52ms
05-01 06:31:50.292: I/Choreographer(1452): Skipped 59 frames!  The application may be doing too much work on its main thread.
05-01 06:31:50.322: D/gralloc_goldfish(1452): Emulator without GPU emulation detected.
以下是我在“删除任务”操作中的代码:

从上面的代码中,您可以看到我在选择删除作业时创建了一个对话框。应用程序将停止并重新启动。选定的工作分配不会被删除

我有一个菜单来选择删除:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.menuAdd:
        Intent addAssignment = new Intent(this, AssignmentAddNew.class);
        startActivity(addAssignment);
        return true;
    case R.id.menuModify:
        Intent editAssignment = new Intent(this, AssignmentEdit.class);
        startActivity(editAssignment);
        return true;
    case R.id.menuDelete:
        deleteAssignment();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
以下是完整的数据库代码:

package com.mada.assignmentmanager;

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

public class AssignmentManagerDatabase {

public static final String KEY_ROWID = "_id";
public static final String KEY_MODULECODE = "module_code";
public static final String KEY_ASSIGNMENTNAME = "assignment_name";
public static final String KEY_MARKSPROPORTION = "marks_proportion";
public static final String KEY_DUEDATE = "due_date";
public static final String KEY_PROGRESS = "_progress";

private static final String DATABASE_NAME = "Assignmentdb";
private static final String DATABASE_TABLE = "AssignmentTable";
private static final int DATABASE_VERSION = 1;

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
String cmd;

private static class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    private static final String CREATE_NEW_DATABASE = "CREATE TABLE "
            + DATABASE_TABLE + " (" + KEY_ROWID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_MODULECODE
            + " TEXT  NOT NULL, " + KEY_ASSIGNMENTNAME + " TEXT NOT NULL, "
            + KEY_MARKSPROPORTION + " INTEGER, " + KEY_DUEDATE
            + " TEXT NOT NULL, " + KEY_PROGRESS + " INTEGER);";

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_NEW_DATABASE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w("AssignmentDBAdapter", "Upgrading from version" + oldVersion
                + " to " + newVersion
                + ", which will destroy all the old data.");
        db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE);
        onCreate(db);
    }
}

public AssignmentManagerDatabase(Context c) {
    ourContext = c;
}

public AssignmentManagerDatabase open() {
    ourHelper = new DbHelper(ourContext);
    ourDatabase = ourHelper.getWritableDatabase();
    return this;
}

public void close() {
    ourHelper.close();
}

public void createEntry(String moduleCode, String assignmentName,
        String marksProportion, String dueDate, String assignmentProgress) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(KEY_MODULECODE, moduleCode);
    cv.put(KEY_ASSIGNMENTNAME, assignmentName);
    cv.put(KEY_MARKSPROPORTION, marksProportion);
    cv.put(KEY_DUEDATE, dueDate);
    cv.put(KEY_PROGRESS, assignmentProgress);
    ourDatabase.insert(DATABASE_TABLE, null, cv);
}

public Cursor getAllAssignments() {
    // String[] columns = new String[]{KEY_ROWID, KEY_MODULECODE,
    // KEY_ASSIGNMENTNAME, KEY_MARKSPROPORTION, KEY_DUEDATE, KEY_PROGRESS};
    String[] columns = new String[] { KEY_ROWID, KEY_DUEDATE };
    return ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
            null, KEY_DUEDATE);
}

public void deleteAssignment(long id) {
    ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + "=" + id, null);
}

public Cursor getOneAssignment(long assignID) {
    // TODO Auto-generated method stub
    return ourDatabase.query(DATABASE_TABLE, null, KEY_ROWID + "="
            + assignID, null, null, null, null);
}

}
这是对我的数据库的删除操作:

    public void deleteAssignment(long id) {
    ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + "=" + id, null);
}
在调用deleteAsignment之前,需要调用open()方法来打开数据库

如果没有数据库打开调用,我们的数据库将为空

        final AssignmentManagerDatabase db = new AssignmentManagerDatabase(
                        AssignmentManagerView.this);
        db.open():
                db.deleteAssignment(assignID);

第91行的代码是什么?这一行表示deleteAssignment()方法05-01 06:31:42.682:E/AndroidRuntime(1417):在com.mada.assignmentmanager.AssignmentManagerDatabase.deleteAssignment(AssignmentManagerDatabase.java:91)再次检查,或者双击这一行并检查它将告诉您应用程序崩溃的位置。第91行@AssignmentManagerDatabase类。张贴code@Prince对不起,刚才发错了代码。我已经上传了我的数据库代码。第91行是ourDatabase.delete(DATABASE_TABLE,KEY_ROWID+“=”+id,null)@Libin我已经在91Hi@Boopathi行发布了我的数据库代码和该部分,感谢您回答我的问题。=)我可以知道上下文类是从哪里来的吗?我不理解代码的这一部分。这里的上下文是当前活动感谢@Libin^^我现在可以删除所选的作业=)
final Context context = this;
                dgbox.Builder alertDialogBuilder = new AlertDialog.Builder(
                        context);

                    // set title
                    dgbox.setTitle("");

                    // set dialog message
                    dgbox
                        .setMessage("No Records Found!")
                        .setCancelable(false)
                        .setPositiveButton("Exit",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {

                    final AssignmentManagerDatabase db = new AssignmentManagerDatabase(
                    AssignmentManagerView.this);
                    db.deleteAssignment(assignID);
                    finish();

                            }
                          });

                        // create alert dialog
                        alertDialog = dgbox.create();

                        // show it
                        alertDialog.show()
        final AssignmentManagerDatabase db = new AssignmentManagerDatabase(
                        AssignmentManagerView.this);
        db.open():
                db.deleteAssignment(assignID);