2016-08-05 96 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

相关问题