我是Android的菜鸟,我试图通过字符串更新sqlite行条目而不是行号。创建条目然后按字符串删除条目没有问题。但是,当我尝试按字符串更新条目时,我得到一个空指针异常?非常感谢任何帮助。
我删除条目正常的代码:
public void deleteEntry(String coin) throws SQLException{
String[] whereArgs = new String[] { coin };
ourDatabase.delete(DATABASE_TABLE, KEY_NAME + "=?", whereArgs);
我的代码用于更新不起作用的条目:
public void updateEntry(String mCoin, String mQuantity, String mValue) throws SQLException{
// TODO Auto-generated method stub
String[] whereArgs = new String[] { mCoin };
ContentValues cvUpdate = new ContentValues();
cvUpdate.put(KEY_NAME, mCoin);
cvUpdate.put(KEY_QUANTITY, mQuantity);
cvUpdate.put(KEY_VALUE, mValue);
ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_NAME + "=?", whereArgs);
}
我的LogCat:
08-27 01:16:13.734: E/Cursor(1886): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.example.portfolio/databases/PortfolioDatabase, table = cointypeTable, query = SELECT _id, cointype_name, cointype_quantity, cointype_value FROM cointypeTable
08-27 01:16:13.734: E/Cursor(1886): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
08-27 01:16:13.734: E/Cursor(1886): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
08-27 01:16:13.734: E/Cursor(1886): at com.example.portfolio.PortfolioDatabase.getData(PortfolioDatabase.java:76)
08-27 01:16:13.734: E/Cursor(1886): at com.example.portfolio.Portfolio.add(Portfolio.java:1305)
08-27 01:16:13.734: E/Cursor(1886): at com.example.portfolio.Portfolio.onItemSelected(Portfolio.java:836)
08-27 01:16:13.734: E/Cursor(1886): at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
08-27 01:16:13.734: E/Cursor(1886): at android.widget.AdapterView.access$200(AdapterView.java:42)
08-27 01:16:13.734: E/Cursor(1886): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
08-27 01:16:13.734: E/Cursor(1886): at android.os.Handler.handleCallback(Handler.java:587)
08-27 01:16:13.734: E/Cursor(1886): at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 01:16:13.734: E/Cursor(1886): at android.os.Looper.loop(Looper.java:123)
08-27 01:16:13.734: E/Cursor(1886): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 01:16:13.734: E/Cursor(1886): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 01:16:13.734: E/Cursor(1886): at java.lang.reflect.Method.invoke(Method.java:521)
08-27 01:16:13.734: E/Cursor(1886): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 01:16:13.734: E/Cursor(1886): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 01:16:13.734: E/Cursor(1886): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
您是否有可以显示有关错误的更多信息的堆栈跟踪?您可以使用Eclipse调试器或adb logcat获取一个。它可能会显示哪个变量为null。
如果您收到NullPointerException,可能您的ourDatabase.update的一个参数在不应该出现时为null。抛出一些断言来检查你的假设(或者只是使用调试器,它可能会显示问题)。
答案 1 :(得分:0)
从您的logcat中,您似乎忘了在某处关闭光标或数据库。
请您将代码发布到您调用这些方法的地方。