2016-11-04 5 views
-1

私はtodoリストを表示するアプリプロジェクトに取り組んでいる初心者/学生です。私は警告ダイアログを利用して、ユーザからの入力を取得し、後者をテーブルに格納しています。私は、タスクや主題についての情報の両方を取得するために、2つのダイアログに展開すると、次のエラーが発生しました:Android Studioのこのような列エラーはありません

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.zilunlin.bacpack, PID: 8118 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zilunlin.bacpack/com.example.zilunlin.bacpack.MainActivity}: android.database.sqlite.SQLiteException: no such column: subject (code 1): , while compiling: SELECT _id, title, subject FROM tasks 
       ################################################################# 
       Error Code : 1 (SQLITE_ERROR) 
       Caused By : SQL(query) error or missing database. 
       (no such column: subject (code 1): , while compiling: SELECT _id, title, subject FROM tasks) 
       ################################################################# 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7229) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
       Caused by: android.database.sqlite.SQLiteException: no such column: subject (code 1): , while compiling: SELECT _id, title, subject FROM tasks 
       ################################################################# 
       Error Code : 1 (SQLITE_ERROR) 
       Caused By : SQL(query) error or missing database. 
       (no such column: subject (code 1): , while compiling: SELECT _id, title, subject FROM tasks) 
       ################################################################# 
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) 
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) 
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59) 
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) 
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1301) 
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1172) 
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1340) 
        at com.example.zilunlin.bacpack.MainActivity.updateUI(MainActivity.java:128) 
        at com.example.zilunlin.bacpack.MainActivity.onCreate(MainActivity.java:36) 
        at android.app.Activity.performCreate(Activity.java:6876) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
        ... 9 more 

注意このエラーを直接検出し、私はデバッグを実行する場合にのみ明らかであるされていないこと。

次は、MainActivityから私のコードで特にここダイアログ

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_add_task: 
      final EditText taskEditText = new EditText(this); 
      AlertDialog dialog = new AlertDialog.Builder(this) 
        .setTitle("Add a new task") 
        .setMessage("What is it that you gotta do?") 
        .setView(taskEditText) 
        .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          String task = String.valueOf(taskEditText.getText()); 
          SQLiteDatabase db = mHelper.getWritableDatabase(); 
          ContentValues values = new ContentValues(); 
          values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task); 
          db.insertWithOnConflict(TaskContract.TaskEntry.TABLE, 
            null, 
            values, 
            SQLiteDatabase.CONFLICT_REPLACE); 
          db.close(); 
          updateUI(); 
         } 
        }) 
        .setNegativeButton("Cancel", null) 
        .create(); 
      dialog.show(); 
      final EditText SubjectText = new EditText(this); 
      AlertDialog setSubject = new AlertDialog.Builder(this) 
        .setTitle("Add its subject") 
        .setMessage("What is its subject?") 
        .setView(SubjectText) 
        .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface setSubject, int which) { 
          String subject = String.valueOf(SubjectText.getText()); 
          SQLiteDatabase db = mHelper.getWritableDatabase(); 
          ContentValues subjectvalues = new ContentValues(); 
          subjectvalues.put(TaskContract.TaskEntry.SUBJECT_NAME, subject); 
          db.insertWithOnConflict(TaskContract.TaskEntry.TABLE, 
            null, 
            subjectvalues, 
            SQLiteDatabase.CONFLICT_REPLACE); 
          db.close(); 
          updateUI(); 
         } 

        }) 
        .setNegativeButton("Cancel", null) 
        .create(); 
      setSubject.show(); 




      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    }} 

は、DB契約

import android.provider.BaseColumns; 

public class TaskContract { 
    public static final String DB_NAME = "com.zilunlin.todolist.db"; 
    public static final int DB_VERSION = 1; 

    public class TaskEntry implements BaseColumns { 
     public static final String TABLE = "tasks"; 
     public static final String COL_TASK_TITLE = "title"; 
     public static final String SUBJECT_NAME = "subject"; 
    } 
} 

あり、最終的には、ここではデシベルヘルパーが

public class TaskDbHelper extends SQLiteOpenHelper { 

    public TaskDbHelper(Context context) { 
     super(context, TaskContract.DB_NAME, null, TaskContract.DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String createTable = "CREATE TABLE " + TaskContract.TaskEntry.TABLE + " (" + 
       TaskContract.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       TaskContract.TaskEntry.COL_TASK_TITLE + " TEXT NOT NULL);" + 
       TaskContract.TaskEntry.SUBJECT_NAME + " TEXT NOT NULL);"; 

     db.execSQL(createTable); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TaskContract.TaskEntry.TABLE); 
     onCreate(db); 
    } 
} 

ですこの質問は重複する可能性があると私は理解していますが、プログラミングに関する私の現在の理解で、私は回答を適切に移すことができません。どんな反応も高く評価されます。

PS:私はToDoリストに関するAldo Ziflajの役立つチュートリアルに従った。変更あなたは余分なセミコロンを追加した

答えて

0

...

この

文字列のcreateTable = "NOTが存在する場合は、CREATE TABLE" を+ TaskContract.TaskEntry.TABLE + "(" + TaskContract.TaskEntry._ID + "INTEGER PRIMARY KEY AUTOINCREMENT" + TaskContract.TaskEntry.COL_TASK_TITLE + "TEXT NOT NULL" + TaskContract.TaskEntry.SUBJECT_NAME + "TEXT NOT NULL");

+0

お返事ありがとうございます。私はあなたが示唆したことを試しましたが、問題はまだ続きます。 – Ziiil

+0

同じエラーが発生していますか? –

+0

はい、それでも同じエラーです。 – Ziiil

関連する問題