我正在我的应用中开发自定义内容提供商。当从自定义内容提供商获取列表时面对问题。细节,我的自定义内容提供程序包含一个表。我只想在这张表中获取所有对象。但它不起作用。这是我的代码,请告诉我我错了什么?
public void onAdd(View v) {
String name = edtname.getText().toString();
Uri uri = Uri.parse("content://homework.iuh.hh.customcontentprovider.AccountProvider/accounts");
ContentValues values = new ContentValues();
values.put("NAME", name);
getContentResolver().insert(uri, values);
}
public void getList(View v) {
Uri uri = Uri.parse("content://homework.iuh.hh.customcontentprovider.AccountProvider/accounts");
Cursor c = getContentResolver().query(uri,null,null,null,null);
c.moveToFirst();
String res= "";
while(!c.isAfterLast())
{
res += c.getString(0);
c.moveToNext();
}
c.close();
Log.i(TAG,res);
And it is query method in content provider
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Log.i(TAG,"query()");
Cursor c = getContext().getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);
c.setNotificationUri(getContext().getContentResolver(),uri);
return c;
}
在方法onAdd()中,它工作正常。但是使用方法getList,它显示日志,查询函数被称为非常时间。并使用消息
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!
05-21 11:07:43.661 5876-5876/? E/AndroidRuntime: Error reporting crash
android.os.TransactionTooLargeException
答案 0 :(得分:1)
尝试将代码更改为如下:
Cursor c = getContentResolver().query(uri,null,null,null,null);
String res= "";
while(c.moveToNext()){
res += c.getString(0);
}
c.close();
Log.i(TAG,res);
真正的问题是您的内容提供商只是在您的查询方法中无休止地循环。你需要在这里实际执行SQL,而不是调用内容解析器。看一下this课程