Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何按字符串更新sqlite行条目?_Android_Database_String_Sqlite_Nullpointerexception - Fatal编程技术网

Android 如何按字符串更新sqlite行条目?

Android 如何按字符串更新sqlite行条目?,android,database,string,sqlite,nullpointerexception,Android,Database,String,Sqlite,Nullpointerexception,我是android的noob,我正试图通过字符串而不是行号来更新sqlite行条目。我可以创建一个条目,然后按字符串删除条目。然而,当我试图通过字符串更新条目时,我得到一个空指针异常?非常感谢您的帮助 我的代码用于删除工作正常的条目: public void deleteEntry(String coin) throws SQLException{ String[] whereArgs = new String[] { coin }; ourDatabase.delete(DAT

我是android的noob,我正试图通过字符串而不是行号来更新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);   
}
我的日志:

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)
08-27 01:16:13.734:E/游标(1886):结束尚未停用或关闭的游标。database=/data/data/com.example.portfolio/databases/PortfolioDatabase,table=cointypeTable,query=SELECT\u id,cointype\u name,cointype\u数量,cointype\u值来自cointypeTable
08-27 01:16:13.734:E/Cursor(1886):android.database.sqlite.DatabaseObjectNotClosedException:应用程序未关闭在此打开的光标或数据库对象
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteCursor.(SQLiteCursor.java:210)
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
08-27 01:16:13.734:E/Cursor(1886):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
08-27 01:16:13.734:E/Cursor(1886):位于com.example.PortfolioDatabase.getData(PortfolioDatabase.java:76)
08-27 01:16:13.734:E/Cursor(1886):位于com.example.portfolio.portfolio.add(portfolio.java:1305)
08-27 01:16:13.734:E/Cursor(1886):在com.example.portfolio.portfolio.onItemSelected(portfolio.java:836)
08-27 01:16:13.734:E/Cursor(1886):在android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
08-27 01:16:13.734:E/Cursor(1886):在android.widget.AdapterView.access$200(AdapterView.java:42)
08-27 01:16:13.734:E/Cursor(1886):在android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
08-27 01:16:13.734:E/Cursor(1886):位于android.os.Handler.handleCallback(Handler.java:587)
08-27 01:16:13.734:E/Cursor(1886):位于android.os.Handler.dispatchMessage(Handler.java:92)
08-27 01:16:13.734:E/Cursor(1886):位于android.os.Looper.loop(Looper.java:123)
08-27 01:16:13.734:E/Cursor(1886):位于android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 01:16:13.734:E/Cursor(1886):位于java.lang.reflect.Method.invokenactive(本机方法)
08-27 01:16:13.734:E/Cursor(1886):位于java.lang.reflect.Method.invoke(Method.java:521)
08-27 01:16:13.734:E/Cursor(1886):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 01:16:13.734:E/Cursor(1886):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 01:16:13.734:E/光标(1886):在dalvik.system.NativeStart.main(本机方法)

您是否有可以显示有关错误的更多信息的堆栈跟踪?您可以使用Eclipse调试器或通过adb logcat获得一个。它可能会向您显示哪个变量为null


如果您得到的是NullPointerException,则可能是ourDatabase.update的一个参数在不应该为空时为空。抛出一些断言来检查您的假设(或者只使用调试器,它可能会显示问题)

从您的日志猫中,您似乎忘记了在某个地方关闭光标或数据库。
请您将调用这些方法的代码发布到哪里。

@Squonk刚刚发布了我的日志猫。有什么想法吗?你是否定期关闭数据库?还是使用托管游标?@Squonk是。刚查过。每次打开后一定要关闭它。我刚刚发布了日志。有什么想法吗?刚刚找到!它隐藏在我的代码中,而我忽略了一个方法。谢谢