2013-02-13 105 views
0

我想插入值使用Sqlite,但插入到表中時,它是拋出nullpointerException。Android的Sqlite拋出空指針異常

這是我的DB類:

public class FeedEntry extends SQLiteOpenHelper implements BaseColumns{ 

public static final String Table_Name = "Capture"; 
public static final String ColumnName_EmpCode = "EmpCode"; 
public static final String ColumnName_CallName = "CallName"; 
public static final String ColumnName_FirstName = "FirstName"; 
public static final String columnName_LastName = "LastName"; 

private static final String DATABASE_NAME = "Capture.db"; 
private static final int DATABASE_VERSION = 1; 


private static final String DATABASE_CREATE = " create table "+Table_Name+"("+ColumnName_EmpCode+" text, " 
     +ColumnName_CallName+" text);";// "+COLUMN_NAME_PASSWORD+ " text);"; 


public FeedEntry(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(DATABASE_CREATE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    db.execSQL("DROP TABLE IF EXISTS " + Table_Name); 
    onCreate(db); 

} 

}

這是我的DAO類:

public class CaptureDAO { 

private static SQLiteDatabase dataBase; 
private FeedEntry dbHelper = null; 
private String[] allColumns = {FeedEntry.ColumnName_EmpCode, FeedEntry.ColumnName_CallName}; 

public CaptureDAO(Context context) { 
    dbHelper = new FeedEntry(context); 
} 

public void open() throws SQLException { 
    dataBase = dbHelper.getWritableDatabase(); 
} 

public void close() { 
    dbHelper.close(); 
} 

public static void empDetails(String empCode, String callName){ 
    System.out.println("IN DAO CLASS "+empCode+" "+callName); 
    ContentValues values = new ContentValues(); 
    System.out.println("In dao step 1"); 
    values.put(FeedEntry.ColumnName_EmpCode, empCode); 
    System.out.println("In dao step 2"); 
    values.put(FeedEntry.ColumnName_CallName, callName); 
    System.out.println("In dao step 3"); 

    long insertId = dataBase.insert(FeedEntry.Table_Name, null, values); 
    System.out.println("InserId "+insertId); 
    //Cursor cursor = dataBase.query(FeedEntry.Table_Name, allColumns, FeedEntry.ColumnName_EmpCode+" = "+insertId, null, null, null, null); 

} 

}

我嘗試使用下面一行的插入值in activity class:

CaptureDAO.empDetails(empCode.getText().toString(), empName.getText().toString());

這是我的logcat:

02-13 05:42:59.295: E/AndroidRuntime(934): FATAL EXCEPTION: main 
02-13 05:42:59.295: E/AndroidRuntime(934): java.lang.NullPointerException 
02-13 05:42:59.295: E/AndroidRuntime(934): at 

com.virinchi.capture.dao.CaptureDAO.empDetails(CaptureDAO.java:39) 
02-13 05:42:59.295: E/AndroidRuntime(934): at com.virinchi.capture.captureDirectory.CaptureActivity.showEmployees(CaptureActivity.java:139) 
02-13 05:42:59.295: E/AndroidRuntime(934): at com.virinchi.capture.bo.async.FetchEmployeeAsyncTask.onPostExecute(FetchEmployeeAsyncTask.java:101) 
02-13 05:42:59.295: E/AndroidRuntime(934): at com.virinchi.capture.bo.async.FetchEmployeeAsyncTask.onPostExecute(FetchEmployeeAsyncTask.java:1) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.os.AsyncTask.finish(AsyncTask.java:631) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.os.Looper.loop(Looper.java:137) 
02-13 05:42:59.295: E/AndroidRuntime(934): at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-13 05:42:59.295: E/AndroidRuntime(934): at java.lang.reflect.Method.invokeNative(Native Method) 
02-13 05:42:59.295: E/AndroidRuntime(934): at java.lang.reflect.Method.invoke(Method.java:511) 
02-13 05:42:59.295: E/AndroidRuntime(934): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-13 05:42:59.295: E/AndroidRuntime(934): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-13 05:42:59.295: E/AndroidRuntime(934): at dalvik.system.NativeStart.main(Native Method) 

回答

0

數據庫爲空。嘗試在使用insert語句之前初始化它。

更改構造函數 -

public CaptureDAO(Context context) { 
    dbHelper = new FeedEntry(context); 
    dataBase = dbHelper.getWritableDatabase(); // initialize ur db here 
} 

而且在活動中使用 -

CaptureDAO captureDao = new CaptureDAO(getApplicationContext()); 
    captureDao.empDetails("ËmpCode", "empName"); 

希望這有助於。

2

則需要當前上下文傳遞給FeedEntry用於創建數據庫。使用參數化的構造傳遞上下文CaptureDAO和從empDetails方法除去static爲:

CaptureDAO CaptureDAOObj=new CaptureDAO(CaptureActivity.this);//<<pass context here 
CaptureDAOObj.empDetails(empCode.getText().toString(), 
            empName.getText().toString()); 
+0

它拋出相同的異常! – 2013-02-13 06:08:55

+0

@AnilM:因爲它非常清楚你沒有將上下文傳遞給FeedEntry PLZ編輯最新的完整日誌,並且還添加了代碼行,你正在創建CaptureDAO對象 – 2013-02-13 06:11:00

+0

是的它現在正在工作! – 2013-02-13 06:17:55