我正在探索从两个或多个连接表中优雅地获取数据的不同方法.
我相信MergeCursor,(Android开发人员指南)似乎暗示可以(例如)SQL UNION通过连接两个查询(或单独添加视图作为行等)来替换等价物- 所以,不是我想要的.
但我不知道究竟是什么CursorJoiner,MatrixCursor是为了什么,或者如何使用它们.我看了他们的来源(和往常一样)对我来说没什么意义!我发现它们在使用中的例子没有清楚地解释产生的效果是什么.我真的很感激它们的良好描述,以及它们可能被使用的背景.
我有一个问题,使用MatrixCursor填充我的ListView:
private void fillData() {
String[] menuCols = new String[] { "icon", "item", "price" };
int[] to = new int[] { R.id.icon, R.id.item, R.id.price };
MatrixCursor menuCursor = new MatrixCursor(menuCols);
startManagingCursor(menuCursor);
menuCursor.addRow(new Object[] { R.drawable.chicken_sandwich, "Chicken Sandwich", "$3.99" });
SimpleCursorAdapter menuItems = new SimpleCursorAdapter(
this, R.layout.menu_row, menuCursor, menuCols, to);
setListAdapter(menuItems);
}
Run Code Online (Sandbox Code Playgroud)
构造SimpleCursorAdapter崩溃的原因.即使我尝试删除图标,应用程序仍然崩溃.这是我的menu_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content" …Run Code Online (Sandbox Code Playgroud) 我有一个内容提供程序,它是我的Android应用程序集自定义的,它需要公开的一个东西是一个小的(20-30 KiB)字节数组.这些blob的URI如下所示:
content://my.authority/blob/#
Run Code Online (Sandbox Code Playgroud)
#行号在哪里; 生成的游标具有标准_id列和数据列.我MatrixCursor在提供者的query()方法中使用a :
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
Run Code Online (Sandbox Code Playgroud)
后来,在使用数据的应用程序中,我做:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
Run Code Online (Sandbox Code Playgroud)
但是,数据不包含原始字节数组的内容; 相反,它包含类似的内容[B@435cc518,它看起来更像是数组的地址而不是内容.我尝试将字节数组包装在一个实现中java.sql.Blob,认为它可能正在寻找,因为内容提供者子系统被编写为易于与SQLite一起使用,但它没有帮助.
有没有人得到这个工作?如果数据是在文件系统中,也有方法ContentProvider,我可以用它来提供编组InputStream到客户端,但数据我想回送生活作为内容提供者的APK资源.
java android android-contentprovider android-cursor matrixcursor
我正在尝试将数据从a输入List<ParseObject>到游标.ParseObject文档可以在这里找到.
我发现您可以使用MatrixCursor执行此操作,请参阅有用的网站:http: //developer.android.com/reference/android/database/MatrixCursor.html
如何为Spinner的SimpleCursorAdapter或Cursor插入额外的元素?
如何创建Cursor数据而不从Android应用程序中的DataBase获取数据?
我的问题是,当我从MyContentProvider.java返回游标时,我尝试做一个cursor.getFloat(),它返回一个String,我不能对它做DecimalFormat.
如何使用addRow(Object [] columnValues)将多种数据类型放入MatrixCursor?
使用Cursor数据的方法:
public void getData() {
Cursor cursor = getContentResolver().query(URI, null, mParseId, null, null);
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
mTextview.setText(df.format(
cursor.getFloat(cursor.getColumnIndexOrThrow("number"))));
}
Run Code Online (Sandbox Code Playgroud)
MyContentProvider.java:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
......
MatrixCursor mc = new MatrixCursor(new String[] { "_id", "title", "number" });
mc.addRow(new String[] { ParseObject.getString("id"), ParseObject.getString("title"), ParseObject.getString("number") });
return mc;
}
Run Code Online (Sandbox Code Playgroud)
我想在MyContentProvider.java中做什么:
@Override
public Cursor query(Uri …Run Code Online (Sandbox Code Playgroud) 我有一个内容提供程序,它返回query()方法的MatrixCursor.
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
{
MatrixCursor cursor = new MatrixCursor(new String[]{"a","b"});
cursor.addRow(new Object[]{"a1","b1"});
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
在LoaderManager的onLoadFinished()回调方法中,我使用游标数据来更新文本视图.
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
cursor.moveToFirst();
String text = (String) textView.getText();
while (!cursor.isAfterLast()) {
text += cursor.getString(1);
cursor.moveToNext();
}
textView.setText(text);
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如何向MatrixCursor添加一个新行,它将立即通知对LoaderManager的回调方法的更改?
我希望,我已经明确了这个问题.提前致谢.
android android-contentprovider matrixcursor android-loadermanager
我有一个搜索视图,其中包含由MatrixCursor填充的建议(因为我已经有一个字符串数组).但是我想知道用户正在选择哪个项目.到目前为止,我只能获得用户点击建议列表的位置:
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
String selectedItem = (String)mAdapter.getItem(position);
Log.e("search view", selectedItem);
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是我有一个错误:android.database.MatrixCursor无法转换为java.lang.String,我不知道如何解决它.非常感谢任何帮助.
android android-arrayadapter simplecursoradapter matrixcursor searchview
我有一个SQLite返回a 的查询Cursor.我希望Cursor通过实现a 来添加一些额外的行MatrixCursor(以便在单击时自动选择保留第一项真实数据).然后我想把它们映射到一个SimpleCursorAdapter.我一直在阅读帖子(和代码),但我仍然觉得如何将它编码为我下面列出的现有代码.
Cursor cursor = myDB.query(DATABASE_TABLE_NAME, resultColumns, whereClause,
whereArgs, null, null, null, null);
// Create Spinner View object from layout resource
Spinner spinner = (Spinner) findViewById(R.id.spinner);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item, // Use a template
// that displays a
// text view
cursor, // Give the cursor to the adapter
new String[] {"ename"}, // Map the NAME column in the
// people database to...
new int[] {android.R.id.text1});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); …Run Code Online (Sandbox Code Playgroud)