我的眼睛很简单.我有一个包含三列的SQLite-Database :
这是我的dataBase类中的一个方法:
public Cursor fetchMessage(String tableNane, int id) {
return myDataBase.rawQuery("SELECT rowid as _id, title FROM "+tableName
+" WHERE rowid = "+id, null);
}
Run Code Online (Sandbox Code Playgroud)
此方法仅返回一行.
在我的活动中,我写道:
Cursor cursor = myDbHelper.fetchMessage(tableName, id);
Run Code Online (Sandbox Code Playgroud)
现在,我想将内容字段的文本存储在String中.
如何才能做到这一点?
有没有人描述initLoader()的Bundle args参数的用法?对象仅仅是在结果游标上设置还是有办法从被查询的数据源访问该对象 - 比如内容提供者?
来自docs:
args 在构造时提供给加载程序的可选参数.如果加载器已存在(不需要创建新加载器),则将忽略此参数,并继续使用最后一个参数.
先感谢您.
在我的Android应用程序中,我使用Sqlite DataBase来存储来自服务器的数据.我使用ContentProvider和ContentResolver访问DataBase中的数据,并使用CursorAdapter将数据绑定到ListView.一旦将数据插入DataBase,将通知CursorAdapter更新ListView.此外,每当我滚动ListView时,我都会从DataBase表中获取新数据,并且ListView将被更新.但是一旦我到达表行的末尾,我需要直接从服务器获取数据而不存储到DataBase中并在ListView中更新它.现在,当我使用接受Cursor数据的CursorAdapter时,如何绑定一个不是来自DataBase的新数据集?是否可以在不从DataBase获取数据的情况下创建Cursor数据,并在ContentProvider中使用ChangeCursor()方法来更新ListView?如果没有,还有其他方法可以达到同样的效果吗?
android android-contentprovider android-cursor android-cursoradapter
我正在尝试根据ISBN从我的库存表中获取某些图书数据.但是,我收到一个错误:"尝试重新打开已经关闭的对象".只有当我单击一个listView对象,转到另一个屏幕,通过"finish()"返回到此页面,然后尝试单击另一个listView对象时,才会出现该错误.我提出的String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);从onClickListener以前的for循环之前onClickListener和现在的作品.
如果我通过"finish()"从另一个活动返回此活动后尝试getInventoryEntriesByISBN,为什么它不起作用?
SearchResultsScreen发生错误:
String searchEntries[] = InventoryAdapter.getInventoryEntriesByISBN(searchQuery, isbn[position]);
Run Code Online (Sandbox Code Playgroud)
并通过扩展,发生在InventoryAdapter:
Cursor cursor = db.rawQuery(query, new String[] {ISBN});
Run Code Online (Sandbox Code Playgroud)
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 = new CustomAdapter(this, R.layout.list, searchArray);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
// On Click ========================================================
dataList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, …Run Code Online (Sandbox Code Playgroud) 我创建了一个服务,它在后台线程上同步来自Web的数据,并希望在服务完成时通知列表活动,以便更新它的光标?最好的方法是什么?我正在考虑在服务完成时发送广播,但不确定这是否是最佳方式.我需要在服务完成后重新查询光标,所以我不确定这是否适用于广播接收器?我有一段时间没有做过很多安卓,所以提前谢谢.
我有这个数据库使用sqlite,我有关闭光标的问题,它说这Application did not close the cursor or database object that was opened here是logcat
10-18 08:40:56.354: E/Cursor(331): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
10-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
10-18 08:40:56.354: E/Cursor(331): at standard.internet.marketing.mymovingfriend.SQLHandler.checkMove(SQLHandler.java:1094)
10-18 08:40:56.354: E/Cursor(331): at standard.internet.marketing.mymovingfriend.ListMovingNames$3.onKey(ListMovingNames.java:98)
10-18 08:40:56.354: E/Cursor(331): at android.view.View.dispatchKeyEvent(View.java:3735)
10-18 08:40:56.354: E/Cursor(331): …Run Code Online (Sandbox Code Playgroud) 我正在尝试从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 = 2097152, size = 403719, freeSpace() = 209669, numRows = 1
08-04 11:10:15.899: ERROR/CursorWindow(4465): Attempting to grow window beyond max size (2097152)
08-04 11:10:15.899: ERROR/Cursor(4465): Failed …Run Code Online (Sandbox Code Playgroud) 有一种简单的方法以相反的顺序显示ListView吗?我正在尝试创建一个基于会话的应用程序,并希望最近的条目位于ListView的底部.我知道transcriptMode和stackFromBottom,但我的问题是数据的顺序.
假设我有100个会话项目,并且想要显示项目80-100,其中100是最近的会话项目.我想显示80-100,这意味着我的查询中的ORDER BY id desc LIMIT 20,它强制将项目排序100到80,与我需要的相反.我目前有一些讨厌的内部查询代码,但感觉应该有一个更简单的解决方案基于反转光标或简单地反转ListView.
我在FragmentActivity中使用多个ListFragments创建一个viewPager.为了填充不同的列表视图,我在加载器中获得LoaderManager和initiliaze.我希望每个片段都有一个唯一的LoaderManager,但是,片段没有getSupportLoaderManager()方法,所以我需要调用父片段活动:
getActivity().getSupportLoaderManager()
Run Code Online (Sandbox Code Playgroud)
我的Loaders在不同片段中识别的这种方法的问题与彼此冲突.当你已经在一个片段中拥有多个加载器id时,它会变得有点麻烦.那么有没有办法为每个片段获取一个唯一的LoaderManager,而不是调用父片段?我基本上希望能够在多个片段上使用相同的id.
谢谢
android android-cursor android-listfragment android-loadermanager android-support-library
如何访问具有相同名称的列?我尝试过,cursor.getString(cursor.getColumnIndexOrThrow("table.column"))但似乎没有用