2016-04-13 3 views
0

После выполнения учебника youtube я написал код, который должен создать базу данных и таблицу.SQLite Database сбой моего приложения

Когда я загружаю приложение и нажимаю кнопку «Волшебные слова», приложение аварийно завершает работу и завершает работу.
База данных также не создана, но я предполагаю, что это связано с сбоем приложения.

Любые идеи, почему это происходит сбой?

Магические слова

public class Magic_Words extends AppCompatActivity { 
    MyDBHelper myDb; 
    EditText edittxt_Ring, edittxt_Locate, edittxt_Lock, edittxt_Wipe; 
    Button btn_Save; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_magic__words); 
     //myDb = new DataBaseHelper(this); 
     myDb = new MyDBHelper(this); 

     edittxt_Ring = (EditText) findViewById(R.id.txt_Ring); 
     edittxt_Locate = (EditText) findViewById(R.id.txt_Locate); 
     edittxt_Lock = (EditText) findViewById(R.id.txt_Lock); 
     edittxt_Wipe = (EditText) findViewById(R.id.txt_Wipe); 
     Add_Data(); 
    } 

    public void Add_Data() { 
     btn_Save.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         boolean isInserted = myDb.insertMagicWords(edittxt_Ring.getText().toString()); 
         if (isInserted == true) 
          Toast.makeText(Magic_Words.this, "Magic Words Saved", Toast.LENGTH_LONG).show(); 
         else 
          Toast.makeText(Magic_Words.this, "Error Saveng Your Magic Words.", Toast.LENGTH_LONG).show(); 

        } 
       } 

     ); 
    } 
} 

BDHelper

//public class MyDBHandler extends SQLiteOpenHelper { 

    public class MyDBHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "TextIt.db"; 
    public static final String TABLE_NAME = "MagicWords"; 
    public static final String ColumnID = "ID"; 
    public static final String ColumnCommand = "Word"; 


    public MyDBHelper(Context context) { 
     super(context, DATABASE_NAME, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table " + TABLE_NAME + " (" + ColumnCommand + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + 
       ColumnCommand + "TEXT)"); 
    } 

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

    public boolean insertMagicWords(String txt_Ring) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(ColumnCommand, txt_Ring); 
     long result = db.insert(TABLE_NAME,null, contentValues); 
     if (result == -1) 
      return false; 
     else 
      return true; 

    } 
} 

Стек трассировки (я думаю)

04-13 08:56:58.967 17258-17258/? E/AndroidRuntime: FATAL EXCEPTION: main 
                Process: com.kieran.textit, PID: 17258 
                java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kieran.textit/com.kieran.textit.Magic_Words}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                 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) 
                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
                 at com.kieran.textit.Magic_Words.Add_Data(Magic_Words.java:37) 
                 at com.kieran.textit.Magic_Words.onCreate(Magic_Words.java:33) 
                 at android.app.Activity.performCreate(Activity.java:6237) 
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                 at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                 at android.os.Handler.dispatchMessage(Handler.java:102)  
                 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)  
+0

Вы, пожалуйста, напишите свой стек? –

+0

Я думаю, что iv отправил правильную вещь. –

+0

btn_Save имеет значение null, и вы устанавливаете onclicklistener на нем. –

ответ

2

Это потому, что ваша кнопка становится нулевым.

Добавьте это на свой onCreate.

btn_Save = (Button) findViewById(R.id.yourbuttonid); 
0

Неверный запрос на создание таблицы. Вы должны поставить пробел между именем столбца и его тип данных, а также иметь в виду, о скобах, которые вы используете в запросе

Синтаксис Создать запрос

Create table TABLE_NAME (ID Integer Primary Key Autoincrement, COLUMN_1 Text, COLUMN_2 Text) 

По вашему делу

Заменить

db.execSQL("create table " + TABLE_NAME + " (" + ColumnCommand + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + 
       ColumnCommand + "TEXT)"); 

С

db.execSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT," + ColumnCommand + " TEXT)"); 

Кроме того, вы должны проверить все ваши виджеты инициализированы правильно, как в вашем вопросе выше вам не хватает btnSave инициализации (это вызвало NullPointerException в соответствии с вашим LogCat), поэтому добавьте его

btnSave = (Button) findViewById(R.id.btnSave); 

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 

Вашей logcat говорит, что все это

+0

Спасибо за это. Все еще имея те же проблемы. Все, что я пытаюсь получить на странице MagicWords, приложение просто закрывается. –

Смежные вопросы