2013-02-13 104 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