gpt4 book ai didi

Android - 从服务查询数据库

转载 作者:行者123 更新时间:2023-11-29 15:13:18 24 4
gpt4 key购买 nike

我正在开发一个应用程序,其中我有一些 info 存储在 database 中。我也在 my service 中获得了 new info 但在将它们提交到我的数据库之前,我想 检查新信息是否已经存在于 为此,我在数据库中查询来 self 的服务的特定信息,我得到了 android.database.CursorWindowAllocationException.. 我用谷歌搜索并找到了 this answer .据此,我收到该错误是因为我正在从我的服务中查询数据库。

有什么解决方法吗?

查询数据库的代码

public String getLogData() {
String[] coloumns = { KEY_NETWORK_INFO };
Cursor c = ourDatabase.query(LOG_TABLE_NAME, coloumns, null, null,
null, null, null);
String result = "";
int iNetworkInfo = c.getColumnIndex(KEY_NETWORK_INFO);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iNetworkInfo) + ", ";
}
return result;
}

LOGCAT:

    01-21 13:43:00.633: E/AndroidRuntime(14871): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=762 (# cursors opened by this proc=762)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.CursorWindow.<init>(CursorWindow.java:108)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
01-21 13:43:00.633: E/AndroidRuntime(14871): at com.iqra.adeel.newfyp.part1.AreaDatabase.getLogData(AreaDatabase.java:153)
01-21 13:43:00.633: E/AndroidRuntime(14871): at com.iqra.adeel.newfyp.part1.MyService$MyPhoneStateListener.onSignalStrengthsChanged(MyService.java:102)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.telephony.PhoneStateListener$1.handleMessage(PhoneStateListener.java:301)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.os.Handler.dispatchMessage(Handler.java:102)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.os.Looper.loop(Looper.java:135)
01-21 13:43:00.633: E/AndroidRuntime(14871): at android.app.ActivityThread.main(ActivityThread.java:5223)
01-21 13:43:00.633: E/AndroidRuntime(14871): at java.lang.reflect.Method.invoke(Native Method)
01-21 13:43:00.633: E/AndroidRuntime(14871): at java.lang.reflect.Method.invoke(Method.java:372)
01-21 13:43:00.633: E/AndroidRuntime(14871): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-21 13:43:00.633: E/AndroidRuntime(14871): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

最佳答案

这个错误几乎总是由于游标完成后没有关闭。你从服务中调用 getLogData 所以如果游标没有关闭并且应用程序继续打开新的游标,这个错误是可能发生。 see here

所以在你的代码中关闭光标为

 if (c != null)
c.close();

在返回结果之前,即将 getLogData 方法重写为

public String getLogData() {
String[] coloumns = { KEY_NETWORK_INFO };
Cursor c = ourDatabase.query(LOG_TABLE_NAME, coloumns, null, null,
null, null, null);
String result = "";
int iNetworkInfo = c.getColumnIndex(KEY_NETWORK_INFO);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
result = result + c.getString(iNetworkInfo) + ", ";
}
if (c != null)
c.close();
return result;
}

关于Android - 从服务查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com