2016-08-05 9 views
2

eine ToDo-Liste app Gebäude, dass Benutzer EditText Daten in SQL-Datenbank gespeichert werden, aber wenn ich auf die Schaltfläche klicken sie aber neu gestartet stürzen, ohne Fehlerkann nicht Methode von Android ausführen: onClick

Logcat Fehler, die Eingaben vom Benutzer zu Speichern

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) 

auf Klick-Methode

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(); 
} 

Cursor Code

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

Mögliche Duplikate von [Was ist eine NullPointerException und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

@VedSarkar hast du meine Antwort versucht? – Vucko

+0

@Vucko Ich habe es versucht. Nicht abstürzen, aber einen Fehler geben –

Antwort

0

Ich denke mHelpernull ist. Ich glaube, du hast mHelper nicht initialisiert.

0

Diese Zeile verursacht NullPointerException:

SQLiteDatabase db = mHelper.getWritableDatabase(); 

Sie nicht mHelper überall initialisiert haben, und somit sind Sie die Ausnahme zu bekommen. Sie müssen hinzufügen:

MySQLiteOpenHelper mHelper = new MySQLiteOpenHelper(parameters); 

Wo MySQLiteOpenHelper eine Klasse von Ihnen ist die SQLiteOpenHelper und überschreibt einige seiner Methoden erweitert, die Sie benötigen.

EDIT: Nachdem Sie die Frage mit der Implementierung von SQLiteOpenHelper bearbeiten, dies zu tun:

TaskDbHelper mHelper = new TaskDbHelper(this); 

Wenn Sie in Tätigkeit sind this passieren, und in Fragmente, getActivity() als Parameter übergeben.

+0

wirklich neu zu Android hinzufügen, wie kann ich übergeben getActivity() –

+0

Im Fragment, geben Sie 'getActivity() ', um die Aktivität, die es angehängt ist. Übergeben Sie das als Parameter von 'TaskDbHelper (getActivity())' wie folgt. Was das zweite Problem anbelangt, scheint es, dass Sie keine Spalte mit dem Namen ** Datum ** haben, aber da ich Ihr ursprüngliches Problem behoben habe, würde ich mich über eine Verbesserung freuen und/oder akzeptieren. Suchen Sie nach den Lösungen Ihres neuen Problems, wenn Sie die Lösung nicht finden können, stellen Sie bitte eine neue Frage. – Vucko

Verwandte Themen