2015-08-08 42 views
-1

我創建了一個簡單的應用程序,它存儲了一個人的緊急聯繫人詳細信息,例如姓名,血型,聯繫電話號碼並以文本視圖顯示。所有這一切都應該當我點擊保存按鈕,調用saveMe()方法,但要發生時,我做的是應用程序只是崩潰了,請大家幫忙代碼和日誌貓下面貼Android簡單數據庫應用程序獲取錯誤

數據庫代碼

package com.example.androidsimpledbapp1; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.Cursor; 
import android.content.Context; 
import android.content.ContentValues; 


public class MyDBHandler extends SQLiteOpenHelper { 

/* 
* Class for Working with DB 
*/ 

//Update each time DB structure changes e.g. adding new property 
private static final int DATABASE_VERSION =1; 
//DB Name 
private static final String DATABASE_NAME = "deets.db"; 
//Table name 
public static final String TABLE_PRODUCTS = "products"; 
//DB Columns 
public static final String COLUMN_ID = "_Id"; 
public static final String COLUMN_PERSONNAME = "firstName"; 
public static final String COLUMN_PERSONBLOOD = "bloodType"; 
public static final String COLUMN_PERSONCONTACT = "contactName"; 
public static final String COLUMN_PERSONNUMBER = "phoneNumber"; 
public static final String COLUMN_PERSONRELATION = "relationship"; 

//Constructor 
/* 
* Passing information to super class in SQL 
* Context is background information 
* name of db 
* Database version 
*/ 
public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
} 


/* 
* What to do first time when you create DB 
* Creates the table the very first time 
* (non-Javadoc) 
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase) 
*/ 
@Override 
public void onCreate(SQLiteDatabase db){ 
    String query = "CREATE TABLE "+ TABLE_PRODUCTS + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT "+ 
      COLUMN_PERSONNAME + " TEXT "+ 
      COLUMN_PERSONBLOOD + " TEXT "+ 
      COLUMN_PERSONCONTACT + " TEXT "+ 
      COLUMN_PERSONNUMBER + " TEXT " + 
      COLUMN_PERSONRELATION + " TEXT " + 
      ");"; 
    //Execute the query 
    db.execSQL(query); 
} 

/* 
* If ever upgrading DB call this method 
* (non-Javadoc) 
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int) 
*/ 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    //Delete the current table 
    db.execSQL("DROP TABLE IF EXISTS" + TABLE_PRODUCTS); 
    //create new table 
    onCreate(db); 
} 


//Add new row to the database 
public void addProduct(Details details){ 
    //Built in class - set values for different columns 
    //Makes inserting rows quick and easy 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_PERSONNAME, details.get_firstName()); 
    values.put(COLUMN_PERSONBLOOD, details.get_bloodType()); 
    values.put(COLUMN_PERSONCONTACT, details.get_contactName()); 
    values.put(COLUMN_PERSONNUMBER, details.get_phoneNumber()); 
    values.put(COLUMN_PERSONRELATION, details.get_relationship()); 
    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TABLE_PRODUCTS, null, values); 
    db.close(); 
} 

/* 
public void deleteProducts(){ 
    SQLiteDatabase = getWritableDatabase(); 
    db.execSQL("DROP TABLE"); 

    How to delete the database... 
} 
*/ 


//Take DB and Convert to String 
public String databaseToString(){ 
    String dbString = ""; 
    SQLiteDatabase db = getWritableDatabase(); 
    //Every Column and row 
    String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1"; 

    //Cursor points to a location in your results 
    //First row point here, second row point here 

    Cursor c = db.rawQuery(query, null); 
    c.moveToFirst(); 

    while(!c.isAfterLast()){ 
     //Extracts first name and adds to string 
     if(c.getString(c.getColumnIndex("firstName"))!=null){ 
      dbString += c.getString(c.getColumnIndex("firstName")); 
      /* 
      * Displaying all other columns 
      */ 
     } 
    } 
    db.close(); 
    return dbString; 
} 
} 

詳細類

package com.example.androidsimpledbapp1; 

public class Details { 

//primary key 
private int _id; 
//Properties 
private String _firstName; 
private String _bloodType; 
private String _contactName; 
private String _phoneNumber; 
private String _relationship; 

//Dont Have to Enter Everything each time 
public Details(){ 

} 

public Details(String firstName){ 
    this.set_firstName(firstName); 
} 

//Passing in details 
//Setting values from the user 
public Details(String firstName, String bloodType, 
     String contactName, String phoneNumber, 
     String relationship){ 
    this.set_firstName(firstName); 
    this.set_bloodType(bloodType); 
    this.set_contactName(contactName); 
    this.set_phoneNumber(phoneNumber); 
    this.set_relationship(relationship); 

} 

//Retrieve the data 
public int get_id() { 
    return _id; 
} 

//Setter allows to give property 
public void set_id(int _id) { 
    this._id = _id; 
} 

public String get_firstName() { 
    return _firstName; 
} 

public void set_firstName(String _firstName) { 
    this._firstName = _firstName; 
} 

public String get_bloodType() { 
    return _bloodType; 
} 

public void set_bloodType(String _bloodType) { 
    this._bloodType = _bloodType; 
} 

public String get_contactName() { 
    return _contactName; 
} 

public void set_contactName(String _contactName) { 
    this._contactName = _contactName; 
} 

public String get_phoneNumber() { 
    return _phoneNumber; 
} 

public void set_phoneNumber(String _phoneNumber) { 
    this._phoneNumber = _phoneNumber; 
} 

public String get_relationship() { 
    return _relationship; 
} 

public void set_relationship(String _relationship) { 
    this._relationship = _relationship; 
} 

} 

主要活動(這其中所有的數據將被顯示)

package com.example.androidsimpledbapp1; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

//Changing Activity 
public void editBtnPressed(View v){ 
    Intent intent = new Intent(MainActivity.this, EditScreen.class); 
    startActivity(intent); 
} 
} 

編輯屏幕 - 屏幕,所有的編輯文本,它與保存按鈕

package com.example.androidsimpledbapp1; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class EditScreen extends Activity { 

EditText firstNameInput; 
EditText bloodTypeInput; 
EditText contacNameInput; 
EditText phoneNumberInput; 
EditText relationshipInput; 

TextView displayName; 
MyDBHandler dbHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_edit_screen); 
    firstNameInput = (EditText) findViewById(R.id.inputname); 
    displayName = (TextView) findViewById(R.id.dbname); 
    dbHandler = new MyDBHandler(this, null, null, 1); 

} 

/* 
* Causing error fix the error 
*/ 
public void saveMe(View v){ 
    Details detail = new Details(firstNameInput.getText().toString(), 
      bloodTypeInput.getText().toString(), 
      contacNameInput.getText().toString(), 
      phoneNumberInput.getText().toString(), 
      relationshipInput.getText().toString() 

      ); 
    dbHandler.addProduct(detail); 
    printDatabase(); 
} 

private void printDatabase() { 
    //Taking the string 
    String dbString = dbHandler.databaseToString(); 
    //Display in the textview 
    displayName.setText(dbString); 
} 

} 

登錄貓屏幕 - 錯誤

08-08 21:58:33.896:E/AndroidRuntime(368) :致命例外:main 08-08 21:58:33.896:E/AndroidRuntime(368):java.lang.IllegalStateException:無法執行活動的方法 08-08 21:58:33.896:E/AndroidRuntime(368) ):at android.view.View $ 1.onClick(View.java:2144) 08-08 21:58:33.896:E/AndroidRuntime(368):at android.view.View.performClick(View.java:2485) 08-08 21:58:33.896: E/AndroidRuntime(368):在android.view.View $ PerformClick.run(View.java:9080) 08-08 21:58:33.896:E/AndroidRuntime(368):at android.os.Handler.handleCallback Handler.java:587) 08-08 21:58:33.896:E/AndroidRuntime(368):at android.os.Handler.dispatchMessage(Handler.java:92) 08-08 21:58:33.896:E/AndroidRuntime(368):在android.os.Looper.loop(Looper.java:130) 08-08 21:58:33.896:E/AndroidRuntime(368):在android.app.ActivityThread.main(ActivityThread.java: E/AndroidRuntime(368):E/AndroidRuntime(368):at java.lang.reflect.Method.invokeNative(Native Method) 08-08 21:58:33.896:E/AndroidRuntime在java.lang.reflect.Method.invoke(Method.java:507) 08-08 21:58:33.896:E/AndroidRuntime(368):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit .ja va:839) 08-08 21:58:33.896:E/AndroidRuntime(368):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 08-08 21:58:33.896: E/AndroidRuntime(368):at dalvik.system.NativeStart.main(Native Method) 08-08 21:58:33.896:E/AndroidRuntime(368):引起:java.lang.reflect.InvocationTargetException 08-08 21:58:33.896:E/AndroidRuntime(368):at java.lang.reflect.Method.invokeNative(Native Method) 08-08 21:58:33.896:E/AndroidRuntime(368):at java.lang.reflect .Method.invoke(Method.java:507) 08-08 21:58:33.896:E/AndroidRuntime(368):at android.view.View $ 1.onClick(View.java:2139) 08-08 21: 58:33.896:E/AndroidRuntime(368):... 11更多 08-08 21:58:33.896:E/AndroidRuntime(368):引起:java.lang.NullPointerException 08-08 21:58:33.896:E/AndroidRuntime(368):at com.example.androidsimpledbapp1.EditScreen.saveMe(EditScreen.java:38) 08-08 21:58:33.896:E/AndroidRuntime(368) :... 14更多

+1

錯字,您忘記了逗號,請學習如何使用堆棧跟蹤 – Selvin

+0

代碼中的拼寫錯誤在哪裏? –

回答

0

您的字符串查詢的語法缺少逗號。它應該是

@Override 
public void onCreate(SQLiteDatabase db){ 
    String query = "CREATE TABLE "+ TABLE_PRODUCTS + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
      COLUMN_PERSONNAME + " TEXT, "+ 
      COLUMN_PERSONBLOOD + " TEXT, "+ 
      COLUMN_PERSONCONTACT + " TEXT, "+ 
      COLUMN_PERSONNUMBER + " TEXT, " + 
      COLUMN_PERSONRELATION + " TEXT " + 
      ");"; 
    //Execute the query 
    db.execSQL(query); 
} 
+0

現在它得到了一個不同的錯誤 –

+0

我更新了上面的日誌貓 –

相關問題