2016-08-05 66 views
2

構建一個待辦事項列表應用程序,從而節省用戶EDITTEXT數據在SQL數據庫中,但是當我點擊它崩潰了,但重新啓動按鈕,而不從用戶節省了輸入錯誤無法執行的android的方法:的onClick

logcat的錯誤

0 

8-06 23:36:23.018 2904-2904/com.naive.LISTY E/SQLiteLog: (1) table tasks has no column named date 
08-06 23:36:23.019 2904-2904/com.naive.LISTY E/SQLiteDatabase: Error inserting date=12/12/12 Description=hello world title=Hello time=12:50 
                   android.database.sqlite.SQLiteException: table tasks has no column named date (code 1): , while compiling: INSERT INTO tasks(date,Description,title,time) VALUES (?,?,?,?) 
                    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 
                    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) 
                    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
                    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
                    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
                    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341) 
                    at listy.naive.com.listy.Dialog.Add_task(Dialog.java:63) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                    at android.view.View.performClick(View.java:5198) 
                    at android.view.View$PerformClick.run(View.java:21147) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
上點擊方法

public void Add_task(View view) { 

    EditText mTitle = (EditText)findViewById(R.id.title_field); 
    String Title = String.valueOf(mTitle.getText()); 

    EditText mTask = (EditText)findViewById(R.id.description_field); 
    String Task = String.valueOf(mTask.getText()); 

    EditText mDate = (EditText) findViewById(R.id.date_field); 
    String Date = String.valueOf(mDate.getText()); 

    EditText mTime = (EditText) findViewById(R.id.time_field); 
    String Time = String.valueOf(mTime.getText()); 

    SQLiteDatabase db = mHelper.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(TaskContract.TaskEntry.COL_TASK_TITLE, Title); 
    values.put(TaskContract.TaskEntry.COL_TASK_DESCRIPTION, Task); 
    values.put(TaskContract.TaskEntry.COL_TASK_DATE, Date); 
    values.put(TaskContract.TaskEntry.COL_TASK_TIME, Time); 

    db.insert(TaskContract.TaskEntry.TABLE, null, values); 
    //updateUI(); 
    //db.close(); 
} 

光標代碼

private Cursor updateUI() { 
    ArrayList<String> taskList = new ArrayList<>(); 
    SQLiteDatabase db = mHelper.getReadableDatabase(); 
    Cursor cursor = db.query(TaskContract.TaskEntry.TABLE, 
      new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.COL_TASK_TITLE, TaskContract.TaskEntry.COL_TASK_DESCRIPTION, TaskContract.TaskEntry.COL_TASK_DATE, TaskContract.TaskEntry.COL_TASK_TIME}, 
      null, null, null, null, null); 
    return cursor;} 

mHelper

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.COL_TASK_DATE + "TEXT NOT NULL," + 
       TaskContract.TaskEntry.COL_TASK_DESCRIPTION + "TEXT NOT NULL," + 
       TaskContract.TaskEntry.COL_TASK_TIME + "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); 
    }} 
+1

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -it) –

+0

@VedSarkar你試過我的回答嗎? – Vucko

+0

@Vucko我試過了。不是崩潰,但給出了一個錯誤 –

回答

0

我覺得mHelpernull。我想你沒有初始化mHelper

0

此行引起NullPointerException

SQLiteDatabase db = mHelper.getWritableDatabase(); 

您還沒有初始化mHelper任何地方,因此,你要除外。您需要添加:

MySQLiteOpenHelper mHelper = new MySQLiteOpenHelper(parameters); 

MySQLiteOpenHelper是一類延伸SQLiteOpenHelper和覆蓋它的一些方法,你需要你的事。

編輯: 您編輯您的實現的SQLiteOpenHelper問題後,做到這一點:

TaskDbHelper mHelper = new TaskDbHelper(this); 

如果你在活動通過this,並在片段,通過getActivity()作爲參數。

+0

真的是新的android,我怎麼能通過getActivity() –

+0

在片段中,鍵入'getActivity()'獲取它所附加的活動。將這個作爲'TaskDbHelper(getActivity())'的參數傳遞。至於第二個問題,似乎你沒有名爲** date **的列,但是由於我解決了原來的問題,所以我會很高興和/或接受。搜索新問題的解決方案,如果找不到解決方案,請發佈新問題。 – Vucko

相關問題