问题标签 [android-cursor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
17201 浏览

android - 在 CursorAdapter 中使用带有 ORMLite 的 Android 游标

有什么方法可以获取 Cursor 进行查询,我正在使用 ORMLite Dao 对象进行处理?

0 投票
2 回答
15820 浏览

android - CursorLoaders 有什么好处?

Cursors在我的应用程序中广泛使用,以加载和偶尔从数据库写入信息。我已经看到 Honeycomb 和 Compatibility Package 具有Loader旨在帮助以“良好”方式加载数据的新类。

从本质上讲,这些新类(尤其是CursorLoader)是否比以前的数据管理方法好很多?例如,CursorLoader过度管理有什么好处?Cursors

我使用 aContentProvider来处理数据,这显然需要,Uris但是这与initLoader()方法有何关系?我必须设置每个Fragments单独使用加载器吗?每个加载器的 id 需要有多独特,它是在我的应用程序的范围内还是只是一个片段?是否有任何简单的方法可以简单地将 a 传递Uri给 CursorLoader 来查询我的数据?

目前我所能看到的是加载器添加了一个不必要的额外步骤来将我的数据导入我的应用程序,所以有人可以更好地向我解释一下吗?

0 投票
1 回答
1252 浏览

android - ListView 相关问题的 CursorAdapter 和 OnItemClickListener

OnItemClickListener在为我的列表使用光标适配器时,我想问两个与 的行为有关的问题。进一步来说:

我已经覆盖了getCount()游标适配器以添加日志(以便检查何时调用它)。我注意到,当我单击列表中的一个项目时,我看到 getCount() 已执行了两次。我真的不明白为什么会这样。下面是被覆盖的getCount(). mCursor是我的适配器的光标对象。

其次,我想从这个听众开始另一个活动。当我单击一个项目时,我得到以下异常:

08-26 14:15:20.487:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.525:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.535:调试/议程活动(14110):位置是:2

08-26 14:15:20.535:调试/议程活动(14110):ID 是:353

08-26 14:15:20.535: INFO/ActivityManager(104): 开始活动: Intent {AgendaEventActivity (has extras) }

08-26 14:15:20.575:调试/议程活动(14110):onPause

08-26 14:15:20.865:INFO/ActivityManager(104):显示的活动 AgendaEventActivity:287 毫秒(共 287 毫秒)

08-26 14:15:20.875:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.875:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.885:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.885:调试/议程适配器(14110):游标计数为:14

08-26 14:15:20.885: 调试/AndroidRuntime(14110): 关闭虚拟机

08-26 14:15:20.885: WARN/dalvikvm(14110): threadid=1: 线程以未捕获的异常退出 (group=0x40028a00) 08-26 14:15:20.905: ERROR/AndroidRuntime(14110): FATAL EXCEPTION: main 08-26 14:15:20.905: ERROR/AndroidRuntime(14110): java.lang.IllegalStateException: 这只应在光标有效时调用

因此,当我单击一个项目时执行 ,然后从单击的项目的和getCount()遵循两个日志,然后再次调用...最后当前活动暂停,我开始的新活动得到 this ,我不明白为什么..onItemClickListenerposidgetCount()IllegalStateException

对于游标,我在启动时使用了 managedquery() ..

任何帮助将不胜感激!感谢您的时间!

异常的堆栈跟踪是:

08-26 14:35:17.735:错误/AndroidRuntime(24173):致命异常:主要

08-26 14:35:17.735: ERROR/AndroidRuntime(24173): java.lang.IllegalStateException: 这只应在光标有效时调用 08-26 14:35:17.735: ERROR/AndroidRuntime(24173): at android .widget.CursorAdapter.getView(CursorAdapter.java:175)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.AbsListView.obtainView(AbsListView.java:1294)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.ListView.makeAndAddView(ListView.java:1727)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.ListView.fillSpecific(ListView.java:1272)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.ListView.layoutChildren(ListView.java:1591)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.AbsListView.onLayout(AbsListView.java:1147)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1042)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.ViewRoot.performTraversals(ViewRoot.java:1049)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1744)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.os.Handler.dispatchMessage(Handler.java:99)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 android.app.ActivityThread.main(ActivityThread.java:4914)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 java.lang.reflect.Method.invokeNative(Native Method)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 java.lang.reflect.Method.invoke(Method.java:521)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

08-26 14:35:17.735: 错误/AndroidRuntime(24173): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

08-26 14:35:17.735:错误/AndroidRuntime(24173):在 dalvik.system.NativeStart.main(本机方法)

这是来自 getCount() 的 dumpStack:

08-26 14:35:17.615: WARN/System.err(24173): java.lang.Throwable: 堆栈转储

08-26 14:35:17.695:调试/dalvikvm(24173):GC_FOR_MALLOC 在 78 毫秒内释放了 19264 个对象/1052704 个字节

08-26 14:35:17.695: WARN/System.err(24173): 在 java.lang.Thread.dumpStack(Thread.java:618)

08-26 14:35:17.705: WARN/System.err(24173): 在 AgendaAdapter.getCount(AgendaAdapter.java:31)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.ListView.layoutChildren(ListView.java:1491)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.AbsListView.onLayout(AbsListView.java:1147)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1042)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)

08-26 14:35:17.705: WARN/System.err(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.view.View.layout(View.java:7034)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.view.ViewRoot.performTraversals(ViewRoot.java:1049)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1744)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.os.Handler.dispatchMessage(Handler.java:99)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.715: WARN/System.err(24173): 在 android.app.ActivityThread.main(ActivityThread.java:4914)

08-26 14:35:17.715: WARN/System.err(24173): 在 java.lang.reflect.Method.invokeNative(Native Method)

08-26 14:35:17.715: WARN/System.err(24173): 在 java.lang.reflect.Method.invoke(Method.java:521)

08-26 14:35:17.715: WARN/System.err(24173): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

08-26 14:35:17.715: WARN/System.err(24173): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

08-26 14:35:17.715: WARN/System.err(24173): at dalvik.system.NativeStart.main(Native Method)

因此它是从 中调用的ListView,但是如何onPause()在活动之后调用它呢?

0 投票
2 回答
1804 浏览

android - 使用新的 Loader API 时如何保持 ListView 的位置?

在 Honeycomb 中,Loader API 被引入作为通过在后台线程上执行繁重的工作来向应用程序提供数据的正确方法。在我的应用程序中,我正在努力用返回s 的 s 替换我Cursor的所有s。由于现在已贬值,因此建议只调用并允许在后台线程上再次完成工作,然后当它返回时。LoaderCursorCursor.requery()restartLoaderchangeCursoronLoadFinished

除了 ListView 在我想重新查询数据时不保持其滚动位置之外,所有这些都非常Cursor.requery()有效,因为它是具有更新数据的相同 Cursor 实例,所以使用它曾经可以工作。

如何在不丢失滚动位置的情况下刷新加载程序?

0 投票
6 回答
55232 浏览

java - 如何测试 SQLiteDatabase 查询中的光标是否为空

我有一个由以下代码创建的 SQL 表:

我查询表如下:

问题是如果光标为空(即表不存储任何值),我必须启动一个活动 A,如果光标不为空(即表已填满),我必须启动一个活动 B。

我找不到可以告诉我表是否为空的方法。我尝试使用 Log 如下:

但是 LOG 显示 1,如果表是空的......再次显示 1,如果表有 1 个条目......它显示 2,如果表有两个条目,依此类推。

您能否建议一些方法来解决我根据光标是否为空来启动不同活动的问题。

0 投票
3 回答
4935 浏览

android - Android - 光标异常 - 请求的索引 1 大小为 1

我有以下代码:

当我调用 getVEvents 时,我收到以下异常:

第 177 行对应于

在查询方法和 getVEvents 中,我总是检查光标是否为空,并且我正在使用 moveToFirst() 和 moveToNext(),所以我不太确定为什么会发生异常,以及“索引 1 请求的确切原因”大小为 1" 实际上意味着。

非常感谢!

0 投票
0 回答
292 浏览

android - 如何查询具有公共列但没有公共行的多个表?

我有两张表,列数不同。两个表都有一个“inRoster”列,其中包含真/假。我想要的是一个查询,它将返回两个表中的所有行 inRoster = true。两个表之间没有共同的行。联合将不起作用,因为两个表之间的列不同。这可能吗?

0 投票
2 回答
75 浏览

android - 菜鸟:安卓按钮

我有两个按钮 b1 和 b2。如果按下按钮 b1,则执行查询 q1,否则如果按下按钮 b2,则执行另一个查询 q2。

请告诉我如何实现这个。如何实现 b1_click 方法或任何告诉该按钮被按下的内置方法。我试过了

就是说光标(c)应该是final Help?

0 投票
1 回答
4816 浏览

android - Android中关于SQLite数据库游标的几个问题

为了在我的应用程序中实现数据库访问,我遵循了Lars Vogel 教程,但我对一些事情感到非常困惑......

  1. 每次调用fetchTodo新游标时都会创建并返回。将前一个光标留给垃圾收集器。所以,如果我不使用startManagingCursor甚至不使用CursorLoader,我应该在完成后调用.close()光标上的 a 吗?当然,超出fetchTodo范围,例如:

    光标 cursor = mNotesAdapter.fetchTodo(); // 做点什么... cursor.close();

我已经完成了这个游标,并且将在下一次获取时创建新的游标,我应该像这样关闭它还是应该将它留给垃圾收集器?虽然我认为我在谈论两件完全不同的事情......重点是,我应该像上面的例子那样关闭它吗?

  1. Cursor也有一个.deactivate()方法,文档说它使用更少的资源(比活动游标)。我应该什么时候使用这个?例如,在我的应用程序中,我有一个ListActivity通过 a 填充的 a SimpleCursorAdapter(为此的代码初始化只调用一次)。正在使用的游标是一个类成员变量,因为我需要它在填充列表的方法之外。当从数据库中删除某些内容时,我需要它来重新查询数据库。但是在删除记录之前,这是用户操作并且可能需要一段时间才能发生,我是否应该同时停用光标?因为当我再次调用时它会再次激活.requery()。还是SimpleCursorAdapter因为光标不活动而停止工作?

编辑:我刚刚测试了这个,发现deactivate()设置光标适配器后我无法调用。如果光标未处于活动状态,则列表将为空,因此只要显示 ListActivity,它就需要保持活动状态。最后,我们应该让它StartManagingCursor处理它。或者新的CursorLoader.

  1. 我知道startManagingCursor/stopManagingCursor已被弃用,但我不是针对 Honeycomb(至少目前是这样),我现在不想处理新CursorLoader的。但是在上面的教程中,startManagingCursor到处都使用,但从stopManagingCursor不调用一次。为什么不?Android 是否以自己的方式处理这个问题?有什么情况我应该打电话stopManagingCursor吗?
0 投票
1 回答
2989 浏览

android - Android:onclick后显示来自数据库的listview数据

我有一个这样的数据库:表 pepak、表类别、表子类别如果我单击 pepak.name 之一,我只想显示类别但是现在如果我单击 pepak.name 之一,我的应用程序遇到错误并停止。

这是我的代码:

菜单.java

}

PepakCats.java

单击后如何显示数据库中的列表视图数据?