Android自定义内容提供商

时间:2016-05-21 15:17:12

标签: android provider

我正在我的应用中开发自定义内容提供商。当从自定义内容提供商获取列表时面对问题。细节,我的自定义内容提供程序包含一个表。我只想在这张表中获取所有对象。但它不起作用。这是我的代码,请告诉我我错了什么?

 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

崩溃应用

1 个答案:

答案 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课程