Articles of 游标

android.database.CursorWindowAllocationException:即使关闭游标后,游标窗口分配2048 kb失败

有关CursorWindowAllocatoinException的SO有很多问题: SQLite Android数据库游标窗口分配2048 kb失败 无法分配CursorWindow 分配游标时内存不足 Android SQLite CursorWindowAllocationException崩溃 所有这些都表明光标必须在使用后关闭。 但这并没有解决我的问题。 这是我的代码: String query = “select serial from tbl1 union select serial from tbl2 union select serial from tbl3”; SQLiteDatabase db = null; Cursor cur = null; try { SettingsDatabaseHelper dal = new SettingsDatabaseHelper( c); db = dal.getReadableDatabase(); cur = db.rawQuery(query, null); int numRows = […]

成语关闭光标

我应该使用以下哪两个来确保所有游标都关闭? Cursor c = getCursor(); if(c!=null && c.getCount()>0){ try{ // read values from cursor }catch(..){} finally{ c.close(); } }//end if OR Cursor c = getCursor(); try{ if(c!=null && c.getCount()>0){ // read values from cursor }//end if }catch(..){ }finally{ c.close(); } 编辑: 几个问题: 1.我们是否需要在计数为0的游标上调用close()? 因为在第一个习语的情况下,将永远不会调用close()。 它假定对于没有元素的游标,永远不会打开游标。 这是一个有效的假设吗? 请指教。

requestFocus对EditText无法正常工作

花了很多时间来解决问题,看起来很容易,但我真的很累,找不到解决方案。 我有一个Activity,活动有4个EditText组件,其中2个有popup菜单(AlertDialog),其中包含列表,下一个 – 被禁用进行编辑,最后一个 – 是可编辑的,应该显示软键盘,当用户是点击它。 另外,我的根LinearLayout有LinearLayout,里面包含RelativeLayout。 最后一个需要AdvBanner。 最后的LinearLayout(RelativeLayout)与根布局的底部对齐。 描述它的XML部分: 活动开始时,可​​编辑的EditText具有绿色边框,光标闪烁。 几秒钟后,加载并显示AdvBanner。 当它发生时,可编辑的EditText失去了焦点..从这一刻起,我的生活就像一场噩梦。 让我们一步一步看。 问题1.如果在这个时刻(当加载和出现Adv时)用户正在通过软键盘编辑EditText字段,焦点丢失,边框呈现灰色 ,如果用户继续键入文本则没有结果 – 符号是没有打印(EditText中的CURSOR太丢失了)。 我认为任何用户都会生气 – 当你输入文字时,光标处于非活动状态,因为在后台会加载一些adv并且它会自动关注。 为了解决这个问题,在加载Adv(显示)的方法中,我尝试通过requestFocus方法手动将焦点重新聚焦到EditText。 public void onAdLoaded() { // TODO Auto-generated method stub // add app specific code for this event here… // called when an ad is successfully displayed on device CountEdit1.requestFocus(); } 是的,光标返回到EditText字段,如果软键盘处于活动状态,用户仍然可以键入文本,但EditText字段的边框保持GRAY … 注意:实际上我不确定焦点EditText的GREEN和GRAY边界之间的区别.Green通常是当用户点击它时,可能是灰色,当我们想要手动请求焦点时(使用requestFocus()等) […]

Android:sqlite:cursor:getColumnIndex

我在规范化的sqlite数据库上有一个相当复杂的查询(多个连接)。 查询执行SELECT *以启用一些自动属性选择逻辑(因此我无法消除“*”) 我遇到的问题是我的结果集包含多个具有相同属性名称的列。 例如,查询中每个表共有的一个属性是“_id”。 当我去调用”cursor.getColumnIndex(“_id”)” ,返回的值始终是结果集列列表中最后一个”_id”属性的索引(即不是我想要的那个)。 我希望能够使用我的SQL别名前缀,如cursor.getColumnIndex(“A._id”)但这不起作用。 问题 看来cursor.getColumnIndex(AttributeName)返回最后一个“AttributeName”的索引。 谁能证实这一点? 另外,有关如何使用“AttributeName”返回第一个属性的索引的任何建议? 或更好的具有“AttributeName”的Xth属性?

添加额外的元素到游标适配器android

我有一个Cursor包含我的数据库中的所有行。 我将Cursor传递给CursorAdapter,并在列表中显示数据。 但我需要在开头展示一个额外的元素。 我怎样才能做到这一点? 我在某处读到可能可以用CursorWrapper完成,它可以在结果中注入额外的值。 但我不太清楚该怎么做。 如果有人可以给我一个例子(代码),或者有其他想法如何解决这个问题,请告诉我。 谢谢!

Android eclipse startManagingCursor已弃用但想支持较旧的API版本?

我想了解一些事情,我相信这对某些人来说非常基本。 我到处读到不推荐使用startManagingCursor方法,你应该使用CursorLoader类。 但这是否意味着即使对于支持API级别<11的应用程序,您也应该使用CursorLoader类? 或者它是说如果你打算只支持Honeycomb及以上,那么使用cursorLoader? 我似乎无法使用api 4导入游标加载器类,所以我假设使用CursorLoader在Android 3.0+之前不适用,但有人可以为我validation吗? 谢谢

无法恢复活动错误

我的活动包含此代码以获取SD卡上的所有图像: String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.DATA}; Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); int count = cursor.getCount(); int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); int i; for(i = 0; i < count; i++) { cursor.moveToPosition(i); String p = cursor.getString(image_path_index); fd.addToPhonePhoto(p); } cursor.close(); 活动恢复时发生的事件: 03-14 14:06:48.380:E / AndroidRuntime(20793):java.lang.RuntimeException:无法恢复活动{}:java.lang.RuntimeException:无法恢复活动{}:android.database.StaleDataException:Attempted to关闭后访问游标。 它只发生在Android 4.0上。 如果在Android 2.x或3.x上,它可以正常工作。 但是,如果我更改了在“开发人员选项”中选择“不要保留活动”选项的系统设置。 错误未显示。 我想修改我的代码以避免此错误而不更改系统设置。 我该怎么办?

无法分配CursorWindow

我在我的Android应用程序中运行SQLite3数据库。 我刚刚从预先填充的数据库中读取了200k行和14列。 参赛作品是单词。 所有列的数据types都是文本。 查询最多11个字母的单词(例如,ABANDONMENT)工作正常。 但对于12或更高(例如,ABANDONMENTS),应用程序崩溃。 这是logcat: Could not allocate CursorWindow ‘//data//data//com.example.myapp//databases//database.sqlite’ of size 2097152 due to error -12. threadid=11: thread exiting with uncaught exception (group=0x40adf9f0) FATAL EXCEPTION: Thread-2883 android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=861 (# cursors opened by this proc=861) at android.database.CursorWindow.(CursorWindow.java:104) at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198) at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) at […]

按日期从sqlite按升序对列表进行排序

我有一个代码来检索这样的数据。 我想按升序获取日期记录。我尝试使用“KEY_DATE_TIME ASC”。 但它没有用。 public Cursor fetchAllReminders() { return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_PHONE,KEY_DATE_TIME}, null, null, null, null, null); }

使用游标加载器进行排球或服务

当我从Web服务下载数据时,我几乎总是使用服务。 我将结果存储在数据库中,并使用游标加载器在我的视图中显示结果。 但谷歌发布网络库后,我已经变得有点困惑了。 排球库使用异步任务而不是服务,它不使用游标。 我认为我应该避免异步任务并将我的数据存储在数据库中,以便我可以正确处理方向更改 – 而不会丢失数据并且需要再次下载数据。 所以我的问题是,我何时应该使用Volley而不是我自己的下载策略?