Articles of android cursor

从Android中的光标获取字符串?

我的眼睛很简单。 我有一个包含三列的SQLite-Database: ROWID title => text content => text 这是我的dataBase -class中的一个方法: public Cursor fetchMessage(String tableNane, int id) { return myDataBase.rawQuery(“SELECT rowid as _id, title FROM “+tableName +” WHERE rowid = “+id, null); } 此方法仅返回一行。 在我的活动中,我写道: Cursor cursor = myDbHelper.fetchMessage(tableName, id); 现在,我想将内容字段的文本存储在String中。 如何才能做到这一点?

何时关闭SimpleCursorAdapter中使用的Cursor

我正在使用SimpleCursorAdapter在ListView中显示结果,但由于我在搜索过程中需要多次查询我的数据库(使用SearchView小部件),因此我担心光标可能会被打开。 这是我查询我的数据库并在ListView中显示结果的方法: class SearchCustomers extends AsyncTask{ @Override protected Cursor doInBackground(String… params) { //get the query String query=params[0].toLowerCase(Locale.getDefault()); Cursor cursor=mDB.searchCustomersByName((query != null ? query : “@@@@”)); return cursor; } @Override protected void onPostExecute(Cursor result) { if (result != null) { String[] from = new String[] { QuickOrderDB.ID, QuickOrderDB.NAME, QuickOrderDB.ADDRESS, QuickOrderDB.PHONE_NUMBER }; int[] to = new int[] […]

Android数据库 – 由于连接池已关闭,无法执行此操作

我有android数据库和游标的奇怪问题。 不时(非常罕见)发生,我收到客户的崩溃报告。 很难找出崩溃的原因,因为我有大约150,000个活跃用户,每周大约有1个报告,所以这真的是一个小错误。 这是例外: STACK_TRACE=java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed. at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962) at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599) at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348) at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894) at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:834) at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62) at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133) at sk.mildev84.agendareminder.aca(SourceFile:169) 在每个游标“迭代和探索”之前,我使用此代码确保一切正常: db = instance.getWritableDatabase(); cursor = db.rawQuery(selectQuery, null); if (isCursorEmptyOrNotPrepared(cursor)) { … } private synchronized boolean isCursorEmptyOrNotPrepared(Cursor cursor) { if (cursor […]

对于某些文件,Android MediaStore查询MediaStore.MediaColumns.TITLE列为null

我正在对Android的MediaStore文件数据库 – MediaStore.Files.getContentUri(“external”) – 对于某些特定文件夹, MediaStore.MediaColumns.TITLE和MediaStore.MediaColumns.DISPLAY_NAME为空,而对于其他文件夹这个值存在。 我找不到任何关于MediaStore.MediaColumns.TITLE的文档可能为null。 对于一些内部android目录会发生这种情况,例如: _data: /storage/emulated/0/Music, title: null, _display_name: null _data: /storage/emulated/0/Notifications, title: null, _display_name: null _data: /storage/emulated/0/Pictures, title: null, _display_name: null 但是,对于其他一些文件夹,标题是: _data: /storage/emulated/0/Android, title: Android, _display_name: null _data: /storage/emulated/0/DCIM, title: DCIM, _display_name: null _data: /storage/emulated/0/Download, title: Download, _display_name: null 所有数据都直接来自MediaStore查询。 我知道我可以直接使用数据但我正在尝试根据TITLE对查询进行排序,这会导致错误的结果,因为有些是null。 这是预期的行为吗? 如何处理它并检索按标题正确排序的所有文件?

MediaStore.Images.Thumbnails.getThumbnail返回错误的缩略图而不是NULL

考虑如下图所示的场景: 三张照片,其中一张是大型GIF文件(3MP)。 我正在查询MediaStore以检索相应的缩略图。 如果我使用此sortOrder通过CursorLoader初始化Cursor: MediaStore.Images.Media.DATE_ADDED + ” DESC”” 会发生什么: MediaStore返回先前成功检索的缩略图: 预期的行为:当MediaStore由于某种原因无法检索给定图像的缩略图时,它必须返回NULL,根据其Javadoc: “…返回一个Bitmap实例。如果与origId关联的原始图像不是,则它可以为null存在或记忆不够。“ 如果我用这个sortOrder初始化Cursor: MediaStore.Images.Media.DATE_ADDED + ” ASC”” 它运行得很好: 但是我不能简单地改变sortOrder,因为要求是先显示最新的图片。 下面是我的示例代码, 这里是完整的示例项目以及用于重现的三个图像 。 package com.example.getimagefrommediastore; import android.app.Activity; import android.database.Cursor; import android.graphics.Bitmap; import android.os.Bundle; import android.provider.MediaStore; import android.support.v4.content.CursorLoader; import android.widget.ImageView; import android.widget.TextView; public class GetThumbnailsFromMediaStoreSampleActivity extends Activity { TextView mThumb_id_01; TextView mThumb_id_02; TextView mThumb_id_03; ImageView mImg_01; ImageView […]

Intent.ACTION_PICK为某些联系人返回空光标

我有一个应用程序,其中一个方面是用户选择联系人并通过应用程序向该联系人发送文本。 该应用程序仅适用于某些联系人,而其他联系人则失败 更确切地说: 对于我手动输入联系人的联系人, Intent.ACTION_PICKfind并将它们返回给应用程序,即cursor.moveToFirst()为true。 但对于Facebook导入的联系人(我的手机设置为与Facebook联系人同步),我点击联系人后得到以下android.database.CursorIndexOutOfBoundsException 。 我有一个明显的问题是:在我真正选择联系人之后,为什么结果大小为0? 为什么cursor.moveToFirst() false? …Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.CursorWrapper.getString(CursorWrapper.java:114) 05-15 17:57:04.741: E/AndroidRuntime(21301): at com.company.Game.SendTextActivity.onActivityResult(SendTextActivity.java:118) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.app.Activity.dispatchActivityResult(Activity.java:5436) 05-15 17:57:04.741: E/AndroidRuntime(21301): at […]

尝试重新打开已经关闭的对象:java.lang.IllegalStateException:?

我知道这个问题在SO中多次提出过,但我无法弄清楚我的确切问题。 我使用以下代码从数据库(表1)获取数据,并根据检索值更新另一个Table2。 它在一些Android版本中运行良好,但是当我用Android 4.0.3进行测试时。 我正在考虑这个java.lang.IllegalStateException:?.attempt to re-open an already-closed object在sum_cursor.moveToNext(); java.lang.IllegalStateException:?.attempt to re-open an already-closed object sum_cursor.moveToNext(); 。 我在AsyncTask中使用此代码。 /** Sum of total matched values*/ Cursor sum_cursor = db.gettotalMatchvalue(this); if(sum_cursor!=null) { sum_cursor.moveToFirst(); for(int j=0; j<sum_cursor.getCount();j++) { float totalmatchedscore = sum_cursor.getInt(0); float totalingredients = Float.parseFloat(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_TOTALINCREDIENTS))); /**average = totalscore/totalingredients*/ double average = totalmatchedscore/totalingredients; int id = Integer.parseInt(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_ID))); […]

Android MVP:在Presenter中安全使用Context

在我的应用程序中,我使用ContentProvider并使用LoaderManager.LoaderCallbacks. 片段(查看) public class ArticleCatalogFragment extends BaseFragment implements ArticleCatalogPresenter.View, LoaderManager.LoaderCallbacks { @Override public Loader onCreateLoader(int id, Bundle args) { return onCreateArticleCatalogLoader(args); } @Override public void onLoadFinished(Loader loader, Cursor data) { data.registerContentObserver(new LoaderContentObserver(new Handler(), loader)); updateUI(data); } private Loader onCreateArticleCatalogLoader(Bundle args) { int categoryId = args.getInt(CATEGORY_ID); Loader loader = new ArticleCatalogLoader(this.getActivity(), categoryId); return loader; } } […]

带有搜索实现的CursorTreeAdapter

我申请了 android和我使用CursorTreeAdapter作为ExpandableListView。 现在我想使用搜索框来显示已过滤的ExpandableListView项。 喜欢这个: 这是我到目前为止的代码: MainActivity.java : package com.example.cursortreeadaptersearch; import java.util.HashMap; import android.app.SearchManager; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.ContactsContract; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.util.Log; import android.widget.ExpandableListView; import android.widget.SearchView; import android.widget.SearchView.OnCloseListener; import android.widget.SearchView.OnQueryTextListener; import com.actionbarsherlock.app.SherlockFragmentActivity; public class MainActivity extends SherlockFragmentActivity { private SearchView […]

如何更新现有联系人?

我有一个现有联系人,我需要为现有联系人添加工作地址。 我使用以下代码,但它不起作用。 String selectPhone = Data.CONTACT_ID + “=? AND ” + Data.MIMETYPE + “='” + ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE + “‘” + ” AND ” + ContactsContract.CommonDataKinds.StructuredPostal.TYPE + “=?”; String[] phoneArgs = new String[] {String.valueOf(ContactId), String.valueOf( ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)}; ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) .withSelection(selectPhone, phoneArgs) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, STREET) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, CITY) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, REGION) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, POSTCODE) .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, COUNTRY) .build()); this.context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 对此有何解决方案?