问题标签 [android-cursorloader]
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.
android - SherlockListFrgament 与 CommonsWare Loaderex,无法更新数据
我正在使用 ActionBarSherlock 库中的 SherlockListFragment 来显示使用 CommonsWare Loaderex sqlite 光标加载程序的列表,并且一切似乎工作正常,姓名、生日和个人资料图片都显示得很好,但我似乎无法使用 loader.update(...) 更新表中的任何数据,当我调用它时没有任何反应。怎么了?
android - 限制 CursorLoader 中的查询
我正在尝试通过 CursorLoader 从 sqlite db 查询数据。当我浏览 android 开发者网站中的文档时,我找不到限制查询。
CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
如何在 CursorLoader 中实现限制?
提前致谢
android - CursorLoader,获取本地数据库的 URI
我是一名新手 android 程序员,我最近关注了一个教程,该教程展示了如何创建本地 SQLite 数据库,然后使用 SQLiteDatabase.rawQuery 访问数据库以返回光标。我想修改我的应用程序以使用 CursorLoader 这显然是访问数据库的更好方法。我的问题是 CursorLoader 构造函数需要一个 URI。我只输入“file:///[db 路径]”吗?好像有点乱
android - ViewPager PagerAdapter with cursor - CursorLoader.onLoadFinished 不会被不同的查询调用
我正在做一个从数据库中提取报价的报价应用程序,我需要在 ViewPager 中显示报价。
我创建了我的 CursorPagerAdapter,它似乎运行良好。
}
我也在使用 CursorLoader 异步加载数据库
使用 ContentProvider
一切正常,它很好地加载了所有引号,但现在我需要执行搜索。所以我做了一个查询数据库的方法
查询很好,我可以看到 ContentProvider.query() 被调用并打印出 cursor.getCount(),
但是,即使设置了 cursor.setNotificationUri(),现在 MainActivity 中的 onLoadFinished 也不会被调用,我认为它可以工作,因为它在应用程序启动时第一次工作。
我实际上尝试使用内容提供程序插入一些数据并调用 getContext().getContentResolver().notifyChange(uri, null); 它触发了 OnLoadFinished,所以我不知道为什么这个不同的查询不会触发 OnLoadFinished。
非常感谢谁会理解这一点。
android - 由 CursorLoader 支持的 AutoCompleteTextView
所以我在扩展MultiAutoCompleteTextView
和支持它时遇到了麻烦CursorLoader
,同时使用自定义Tokenizer
。这个问题在mAdapter.setCursorToStringConverter();
电话中特别突出。以 Cursor 作为参数的convertToString()
方法在第一次调用此方法时具有有效且未关闭的游标。但是,后续调用会导致空游标或关闭游标。我猜这与LoaderManager
管理CursorLoader
.
如果我将该setCursorToStringConverter()
方法注释掉,那么我会看到一个基于我在此视图中输入的文本的可用选项列表。但是,由于没有convertToString()
实现方法,那么terminateToken()
自定义的方法Tokenizer
并没有接收到我想要的字符串,而是光标对象的代表字符串,因为光标没有被用来获取当前字符串值在结果查询中的所需列。
有没有人能够实现三个类(CursorLoader/LoaderManger
、、MultiAutoCompleteTextView
和Tokenizer
)的组合?
我是否朝着正确的方向前进,或者这根本不可能?
我已经能够实现MultiAutoCompleteTextView
由 a 和 custom 支持SimpleCursorAdapter
的自定义Tokenizer
。我只是想知道是否可以使用 a 来实现这一点CursorLoader
,因为严格模式抱怨光标MultiAutoCompleteTextView
没有被明确关闭。
任何帮助将不胜感激。
更新 1
我现在调用该setStringConversionColumn()
方法而不是setCursorToStringConverter()
@Olaf 建议的方法。我已将其设置在 中,onLoadFinished()
因为这是唯一Cursor
可用的时间,因为它正在实现LoaderManger
.
这适用于为 选择一个项目MultiAutoCompleteTextView
,但不允许在 中选择多个项目MultiAutoCompleteTextView
。
我猜该onTextChanged()
方法存在一些问题,因为它调用restartLoader()
. 这适用于此视图中的第一个条目,但不适用于后续条目。在这一点上,我不太确定出了什么问题。
更新 2
所以我已经确定了这个问题。问题是TextWatcher 的onTextChanged()
方法。在选择终止第一个令牌(假设令牌是“Joe Johnson”)之后,然后在其中输入更多字符MultiAutoCompleteTextView
(例如)传递给方法al
的 arg 的值现在不仅包含额外添加的字符还有之前已经终止的令牌中的字符(此时的值为)。现在,gets 的值被设置为随后被传递到查询中,显然不会返回任何结果。有没有办法解决这种情况?我愿意接受任何建议。s
onTextChanged()
s
Joe Johnson al
mCursor
Joe Johnson al
onCreateLoader()
更新 3
当我实现一个MultiAutoCompleteTextView
由 a 支持的自定义SimpleCursorAdapter
以及一个自定义时,Tokenizer
我设置了一个FilterQueryProvider
这样的:
由于某种原因,该runQuery()
方法被 TextWatcher 的onTextChanged()
方法调用了两次:
所以在我之前的例子中,第一次constraint
传入runQuery()
方法的变量是Joe Johnson al
. 然后第二次runQuery()
调用方法,constraint
变量的值是al
。我不知道为什么该runQuery()
方法只在方法中调用一次时运行两次onTextChanged()
。
android - 如何在 Android ListView 的 OnClickItemListener 中使用 LoaderManager 和 CursorLoader
我有一个简单的(?)Android 应用程序,它以 Activity(“第一个 Activity”)开头,ListView 列出了三个项目:Beginning、Intermediate 和 Advanced。到目前为止,一切都很好。接下来我想要发生的是,如果用户单击开始,将查询 SQLite 数据库,并检索数据库中指定为“开始”的所有项目。然后,我希望启动第二个 Activity(“第二个 Activity”)并将查询中的所有项目显示在该 Activity 的 ListView 中。我使用游标进行这项工作,但我正在尝试更新我的代码以使用 LoaderManager 和 CursorLoader。我认为我需要在第一个活动中的 ListView 的 onItemClick 方法中放置一个 onCreateLoader 方法。举个例子,我正在考虑这样的代码:
}
同样在我的 onClickItem 中,我将创建一个 Intent 并用一束数据填充它(我的第二个 Activity 的 ListView 将需要此数据用于其 onItemClick 方法)。无论如何,当我尝试这个时,Eclipse 对 onItemClick 中的 onCreateLoader 不满意,给了我很多关于不匹配的花括号、缺少分号等的错误消息。那么我做错了什么?单击列表项时如何查询我的数据库?如果我将 onCreateLoader 方法移到 onItemClick 方法之外,但在 setItemClickListener 内,我不会收到错误消息,但是如何在我的 onItemClick 方法中引用它?
任何帮助是极大的赞赏。提前谢谢了!
非常感谢这两个答案!我是安卓新手;我正在尝试实施您的建议并再次陷入困境。我创建了一个名为 GetLevelData 的新 Activity。我的第一个活动现在看起来像这样:
我的新活动如下所示:
}
textView1 是我的布局文件夹中 leveldata.xml 中 LinearLayout 内的 TextView。当我尝试运行它时,在 startActivity 中,我得到一个异常:找不到活动。我错过了什么?我'
android - 如何通过 Intent 将数据从 LoaderManager 传递到另一个活动?
我是一个 Android 新手,我正在尝试更新我的(工作!)使用游标的代码,以便它使用 CursorLoader。我的应用程序从一个带有 ListView 的 Activity 开始,它具有三个选项:Beginning、Intermediate 和 Advanced。根据选择的项目,我想用另一个 ListView 打开第二个 Activity。该 ListView 将从 SQLite 数据库中填充,其中所有项目的级别都为开始。在stackoverflow的其他地方,有人建议我在这两个活动之间插入一个活动来处理实际的数据检索。所以现在我有三个活动。一个有一个具有三个选项的 ListView。那一个通过 Intent 向第二个 Activity 发送一个字符串。第二个活动查询数据库并从与所选级别匹配到 CursorLoader 的所有记录中检索一列。和这里' 我的问题。我想将所有这些数据传递给我的第三个 Activity,以便数据可以显示在 ListView 中。但是如何从 CursorLoader 中获取数据?我想我想做类似的事情:
其中 myData 是来自 CursorLoader 的数据的 ArrayList。我不知道该怎么做。我想知道是否要使用 LoaderManager 来完成此操作,但我也不知道如何执行此操作。
提前致谢!
android - 通过 CursorLoader 中的“选择”参数过滤 ListView
我的语法不正确,或者我还不明白 Loaders 是如何工作的,但我目前有一个 ListView 显示我的数据库中的所有项目。该活动有一个显示今天日期的按钮。用户可以单击它来调出日期对话框,或者可以按上一个/下一个按钮来更改显示的日期。我想根据显示的日期过滤 ListView,因此只有保存该日期的记录才会显示。
目前所有记录都显示为
我已经根据我在网上看到的内容尝试了一些变体,但基本上我试图包含一个“选择”,将今天的日期显示为一个字符串(它已经通过 SimpleDateFormatter 并设置为按钮上的文本)。
和
两者都生成 NullPointerExceptions。任何有关在创建加载程序时过滤此问题的正确方法的指针将不胜感激。
更新
似乎 NullPointerException 正在发生,因为我fillData()
在调用我的方法之前调用了该方法(用于填充我的 ListView)btn_logbook_date.setText()
。我已经在我的活动中进一步向下移动onCreate
,应用程序不再崩溃,但数据不再填充。我意识到如果我用今天的日期保存一条新记录,它会显示在我的列表视图中,但是在更改日期时没有其他记录出现。在 ListView 活动中更改回今天也显示为空白。
当最初从不同的活动保存到数据库时,我也在使用该SimpleDateFormat
方法并转换为与上面相同的格式,因此保存的字符串和按钮上显示的文本应该匹配。
更新
我已经在下面回答了这个问题。关于重新填充列表的问题将单独询问,因为原始问题仅涉及按日期过滤列表。我通过使用今天的日期创建新记录并在打开列表视图活动时填充它们来确认这是有效的。通过更改 Android 模拟器中的日期,然后重新打开应用程序和列表视图活动,我可以看到属于新设置日期的记录。
android - 根据日期选择器更改从数据库重新加载 ListView 内容
我首先要说这是一个两部分的问题。我有一个带有 3 个按钮和一个列表视图的活动。一个按钮打开一个带有日期选择器的对话框片段,按钮文本显示选定的日期。其他 2 个按钮可让您分别前往前/后几天。ListView 应显示与所选日期相对应的记录。
目前,加载活动时,按钮显示今天的日期,列表视图显示数据库中今天的记录。我设法创建了一个重新启动加载程序并在上一个/下一个按钮中调用它的方法,因此当一次导航一天时,列表视图会更新以显示正确的记录,但是当我通过调用 datepicker 更改日期时对话框,我似乎找不到让它正确更新的方法 - 这是问题的第一部分。
第二部分有点难以解释。当我选择一个有 4 条记录(列表视图中的 4 行)的日期时,所有 4 条记录都会显示,但是例如,如果我去第二天只有 2 条记录(列表视图中的 2 行),它将正确显示第一个2 条记录,但接下来的 2 行仍显示上一个日期的数据。为了更好地解释这一点,我们假设列表视图中的每一行都显示了数据库记录 _id 编号。在日期 1(有 4 条记录)我显示 ID 1、2、3、4,但是当更改为日期 2(有 2 条记录)时,它显示 ID 5、6、3、4。
我假设通过合并一个完全清除列表视图内容然后重新填充新日期的方法,我可以同时解决这两个问题。我只是不确定该怎么做。我的代码如下:
更新
显示来自 ContentProvider 的查询信息:
更新
下面的调用适用于refillData()
第一次日期更改,但没有再次起作用。重新启动模拟器并再次尝试后,我能够看到 2 个单独的日期更改的记录,但它不会再次更改数据。
通过以下调用,日期更改后数据不会更改,但是当我按下按钮再次打开日期选择器时,我可以看到后台(对话框片段后面)的列表视图更新。比如我选择日期2,数据不变。我打开日期选择器并在对话框后面显示日期 2 数据。我将日期选择器设置为日期 3,但列表视图仍显示日期 2 的数据。如果再次打开日期选择器,日期 3 的数据会在对话框片段后面的后台加载。
如果我refillData()
在FragDate.show(...)
线路之后或线路之前调用,我会得到相同的结果FragmentTransaction ftLogDate...
。
android - 使用支持库时 LoaderManager 出错
我正在尝试将我的代码从使用游标转换为使用 CursorLoaders。为了支持旧版本的 Android,我安装了支持库,而不是导入 android.content.CursorLoader,而是导入 android.support.v4.content.CursorLoader。现在编译好的代码抛出了两个错误。当我实现它时,第一个错误出现在 LoaderManager 上。错误是:LoaderManager 无法解析为类型。第二个错误是调用 initLoader。错误是:LoaderManager 类型中的方法 initLoader(int, Bundle, LoaderManager.LoaderCallbacks) 不适用于参数(int, Bundle, MyList)。这是我的代码:
}