Articles of 游标

Android SQLite的ORDER BY不起作用

我有一个非常基本的情况: 我有一个大约5k行的桌子: CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER) 我定期更新使用“更新单词SET rand = random()” 在android中,当我使用下面的rawQuery()创build一个游标: SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC; 返回的游标不会以正确的顺序迭代。 例如,它将按照以下顺序输出rand值的列: -1298882092 -2138143484 -1115732861 118839193 … 有谁知道这是怎么回事? 不应该这个工作? 如果我在SQLiteManager中运行完全相同的查询,它将以正确的顺序返回结果,所以这似乎是特定于android / cursor的。 更新: 这里是Android中的代码,我已经尝试了多种方式: […]

SimpleCursorAdapter vs CursorAdapter?

我有一些游标与数据。 我有TextView的可见性取决于光标项的某些属性。 我使用SimpleCursorAdapter并重写getView方法。 但我实际上不使用SimpleCursorAdapter的属性。 将适配器更改为CursorAdapter并重写newView和bindView方法会更好吗?

如何从JSONArray创build光标?

我有一个适配器类扩展GroupingCursorAdapter和typesAdapter_Contacts(Context context, Cursor cursor, AsyncContactImageLoader asyncContactImageLoader)types的构造函数。 我想用这个类填充我的ListView 。 我从一个是JSON Web服务获取数据。 所以我的问题是,我怎样才能将JSONArray转换为Cursor使用相同的适配器类?

Android如何在android中查询庞大的数据库(光标大小限制为1MB)

我正在开发一个需要查询的应用程序,一个超过4k行的数据库,每行有90个字段(string)。 问题是,如果我从数据库中select*,我的光标变得非常大(超过4MB)。 Android中的光标限制为1MB。 我怎样才能解决这个问题,或者什么是最优雅的方法来解决这个问题? 有可能将数据库拆分成较小的块并将其查询出来? 谢谢,Arkde

将Sqllite光标的结果转换为我的对象

我已经对Android上的SQLite数据库执行了一些查询。 使用的主要指令是这样的: Cursor cursor = myDB.rawQuery(select, null); 现在我想把这个查询的结果转换成我在项目中创build的generics类。 如果你认为我想要一个ORM系统,那么你是对的,但是我现在发现的所有ORM系统都是想查询数据库,在数据库中保存对象并pipe理数据库本身。 现在我需要一个简单的ORM特性,它可以完成google.gson库对JSONstring所做的工作,它将JSONstring转换为自定义对象,而且我希望将SQLite光标转换为我的类。 任何build议如何做到这一点?

为什么cursorLoader没有通知源数据的变化?

我有一个简单的contentProvider,一个带有ListView的布局和一个用于在Content Provider和CursorLoader中添加Items的button。 http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html#onLoadFinished(android.content.Loader,D )参考指出 装载程序将监视数据的变化,并在此处通过新的调用向您报告。 你不应该自己监视数据。 例如,如果数据是一个Cursor,并将其放置在CursorAdapter中,则使用CursorAdapter(android.content.Context,android.database.Cursor,int)构造函数,而不传入FLAG_AUTO_REQUERY或FLAG_REGISTER_CONTENT_OBSERVER(即,使用0标志参数)。 这可以防止CursorAdapter自己观察游标,因为当发生变化时,您将得到一个新的游标在这里再次调用游标。 但是onLoadFinished方法中的Log.info行没有被执行,listView没有刷新。 这是我的(简单)代码: public class HomeActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor>{ static final String TAG = "HomeActivity"; SimpleCursorAdapter adapter; ListView listAnnunciVicini; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home); listAnnunciVicini = (ListView) findViewById(R.id.lista_annunci_vicini); adapter = new SimpleCursorAdapter(this, R.layout.list_item, null, new String[] { ContentDescriptor.Annunci.Cols.ID, ContentDescriptor.Annunci.Cols.TITOLO, ContentDescriptor.Annunci.Cols.DESCRIZIONE }, new int[] { R.id.list_annunci_item_id_annuncio, […]

如何显示保存在android的SD卡文件夹中的图像

由于我正在显示保存在SD卡文件夹中的图像,我发现以下链接。 从SDCard的gridview显示图像 。 我正在使用以下代码从SD卡中的指定文件夹中获取图像,但在这里我得到0计数。 MyCode.jav String[] projection = {MediaStore.Images.Media._ID}; final String[] columns = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID }; final String orderBy = MediaStore.Images.Media._ID; Cursor imagecursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, MediaStore.Images.Media.DATA + " like ? ", new String[] {"/my_images"}, null); int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID); this.count = imagecursor.getCount(); this.thumbnails = new Bitmap[this.count]; this.arrPath = new String[this.count]; this.thumbnailsselection = new […]

android cursor.moveToNext()?

我试图查询表中的所有列到一个长文本视图和/或string。 我知道这可能不是正确的做法,但我必须这样做。 纠正我,如果我错了,我的印象是下一步会得到行中的下一列: Cursor c = db.get(); if(c.moveToFirst){ do{ string = c.getString(0); }while(c.moveToNext); 我以为这会得到第一列,并显示其所有内容,而我得到的第一列和第一行。 我究竟做错了什么? 有没有更好的或真正的方式来获得这些信息,而不使用ListView?

带光标的ViewPager PagerAdapter – CursorLoader.onLoadFinished不会被不同的查询调用

我正在做一个报价应用程序,从数据库中拉引号,我需要在ViewPager中显示引号。 我创build了我的CursorPagerAdapter,这似乎很好。 public class MyCursorPagerAdapter extends PagerAdapter { private Cursor cursor; private LayoutInflater inflater; public MyCursorPagerAdapter(Context context, Cursor cursor) { Log.d(MainActivity.TAG, "MyCursorPagerAdapter.onCreate()"); this.cursor = cursor; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void swapCursor(Cursor cursor) { //if(cursor != null) { Log.d(MainActivity.TAG, "swapCursor()."); this.cursor = cursor; //notifyDataSetChanged(); //} } /** * Metóda destroyItem */ @Override public void […]

Android ListView实时更新

我在ListActivity中有一个ListView绑定到一些数据。 我有一个提供数据的内容提供者。 ListActivity通过查询内容parsing器来获取数据: Uri uri = Uri.parse("content://my.provider.DocumentProvider/mystuff"); contentCursor = this.getContentResolver().query(uri, null, null, null, null); 所以现在活动有光标。 它创build一个适配器并将其附加到列表中: ListAdapter adapter = new DocumentListCursorAdapter(this, R.layout.main_row_layout, contentCursor, new String[] { "titleColumn" }, new int[] { titleColumnIndex }); setListAdapter(adapter); 这工作正常; 该列表显示游标中的数据。 但是现在内容提供者有新的数据。 我想要更新列表来显示新的数据。 我见过的例子涉及调用适配器的notifyDataSetChanged,但在我看来,这打破了内容提供者和消耗内容的列表之间的分离。 内容提供者是否需要知道哪些适配器附加到了游标上,以便它可以调用它们的notifyDataSetChanged方法? 还是有没有更好的方式,看不到这两种东西耦合这种方式。