Articles of android cursor

如何从sqlite db加载超过1 MB的数据到android游标?

我正在尝试从sqlite数据库加载超过1MB的数据到android游标。 在加载时,它会产生以下错误 08-04 11:10:15.813: ERROR/CursorWindow(4465): need to grow: mSize = 2097152, size = 403719, freeSpace() = 209669, numRows = 1 08-04 11:10:15.813: ERROR/CursorWindow(4465): Attempting to grow window beyond max size (2097152) 08-04 11:10:15.813: ERROR/Cursor(4465): Failed allocating 403719 bytes for blob at 0,13 08-04 11:10:15.813: DEBUG/Cursor(4465): finish_program_and_get_row_count row 0 08-04 11:10:15.899: ERROR/CursorWindow(4465): need to grow: mSize […]

通过内容提供程序传递二进制blob

我有一个内容提供程序,它是我的Android应用程序集自定义的,它需要公开的一个东西是一个小的(20-30 KiB)字节数组。 这些blob的URI如下所示: content://my.authority/blob/# 其中#是行号; 生成的游标具有标准的_id列和数据列。 我在提供程序的query()方法中使用MatrixCursor : byte[] byteData = getMyByteData(); MatrixCursor mc = new MatrixCursor(COLUMNS); mc.addRow(new Object[] { id, byteData }); 后来,在使用数据的应用程序中,我这样做: Cursor c = managedQuery(uri, null, null, null, null); c.moveToFirst(); byte[] data = c.getBlob(c.getColumnIndexOrThrow(“data”)); 但是,数据不包含原始字节数组的内容; 相反,它包含类似[B@435cc518东西,它看起来更像是数组的地址而不是内容。 我尝试在java.sql.Blob的实现中包装字节数组,认为它可能正在寻找,因为内容提供者子系统被编写为易于与SQLite一起使用,但它没有帮助。 有没有人得到这个工作? 如果数据在文件系统中,我可以使用ContentProvider中的方法向客户端提供编组的InputStream ,但是我尝试发送的数据作为内容提供商的APK中的资源存在。

如何使用联系人ID获取特定联系号码

这里我的联系人姓名显示在列表视图上。 通过单击列表,我获得ContactName和Contact Id 。 从那里我想通过使用Contact ID或Contact name获取Phone number ,请帮助我。 这是我的代码 void ReadContacts(String sort) { final Uri uri = ContactsContract.Contacts.CONTENT_URI; final String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; //boolean mShowInvisible = false; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + ” = ‘1’”; String[] selectionArgs = null; final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + ” COLLATE LOCALIZED ASC”; […]

getSupportLoaderManager()在不同的片段中使用相同的ID?

我在FragmentActivity中使用多个ListFragments创建一个viewPager。 为了填充不同的列表视图,我在加载器中获得LoaderManager和initiliaze。 我想为每个片段都有一个唯一的LoaderManager,但是,片段没有getSupportLoaderManager()方法,所以我需要调用父片段活动: getActivity().getSupportLoaderManager() 我的Loaders在不同片段中识别的这种方法的问题与彼此冲突。 当你已经在一个片段中拥有多个加载器id时,它会变得有点麻烦。 那么有没有办法为每个片段获取一个唯一的LoaderManager,而不是调用父片段? 我基本上希望能够在多个片段上使用相同的id。 谢谢

Android中的倒置ListView?

有一种简单的方法以相反的顺序显示ListView吗? 我正在尝试创建一个基于对话的应用程序,并希望最新的条目位于ListView的底部。 我知道transcriptMode和stackFromBottom,但我的问题是数据的顺序。 假设我有100个会话项目,并且想要显示项目80-100,其中100是最近的会话项目。 我想显示80-100,这意味着我的查询中的ORDER BY id desc LIMIT 20,它强制将项目排序为100到80,与我需要的相反。 我目前有一些讨厌的内部查询代码,但感觉应该有一个更简单的解决方案基于反转光标或简单地反转ListView。

Android SQLite:尝试重新打开已经关闭的对象

我正在尝试根据ISBN从我的库存表中获取某些图书数据。 但是,我收到一个错误:“尝试重新打开已经关闭的对象”。 只有当我单击一个listView对象,转到另一个屏幕,通过“finish()”返回到此页面,然后尝试单击另一个listView对象时,才会出现该错误。 我移动了String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]); 从onClickListener到onClickListener之前的for循环 ,现在它可以正常工作。 如果我通过“finish()”从另一个活动返回此活动后尝试getInventoryEntriesByISBN,为什么它不起作用? SearchResultsScreen发生错误: String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]); 并且通过扩展,发生在InventoryAdapter: Cursor cursor = db.rawQuery(query, new String[] {ISBN}); SearchResultsScreen.java // Set up search array for(int i = 0; i < isbn.length; i++) { searchArray.add(new InventoryItem(isbn[i], InventoryAdapter.getTitleAndAuthorByISBN(isbn[i]))); } Toast.makeText(getApplicationContext(), "searchArray.size()="+searchArray.size(), Toast.LENGTH_LONG).show(); // add data in custom adapter adapter = […]

android服务通知活动完成最好的方法?

我创建了一个服务,它在后台线程上同步来自Web的数据,并希望在服务完成后通知列表活动,以便更新它的光标? 最好的方法是什么? 我正在考虑在服务完成时发送广播,但不确定这是否是最佳方式。 我需要在服务完成后重新查询光标,所以我不确定这是否适用于广播接收器? 我有一段时间没有做过很多安卓,所以提前谢谢。

LoaderManager做什么?

我试图了解loadermanager做了什么。 任何人都可以与它分享一个例子吗? 我创建游标时必须使用它们吗? 如果不是我应该如何使用? 非常感谢一个简单的例子。

如何创建Cursor数据而不从Android应用程序中的DataBase获取数据?

在我的Android应用程序中,我使用Sqlite DataBase来存储来自服务器的数据。 我使用ContentProvider和ContentResolver访问DataBase中的数据,并使用CursorAdapter将数据绑定到ListView。 数据插入DataBase后,将通知CursorAdapter更新ListView。 此外,每当我滚动ListView时,我都会从DataBase表中获取新数据,并且ListView将被更新。 但是一旦到达表行的末尾,我需要直接从服务器获取数据而不存储到DataBase中并在ListView中更新它。 现在,当我使用接受Cursor数据的CursorAdapter时,如何绑定一个不是来自DataBase的新数据集? 是否可以创建Cursor数据而无需从DataBase获取数据并使用ContentProvider中的ChangeCursor()方法来更新ListView? 如果没有,是否还有其他方法可以实现相同的目标?

getLoaderManager()的args参数的用途.initLoader(…,…,…)?

有没有人描述initLoader()的Bundle args参数的用法? 对象仅仅是在结果游标上设置还是有办法从被查询的数据源访问该对象 – 比如内容提供者? 来自docs: args在构造时提供给加载程序的可选参数。 如果加载器已存在(不需要创建新加载器),则将忽略此参数,并继续使用最后一个参数。 先谢谢你。