2016-05-21 3 views
0

私のアプリでカスタムコンテンツプロバイダを開発しています。また、カスタムコンテンツプロバイダからリストを取得する際には、直面しています。詳細は、私のカスタムコンテンツプロバイダはテーブルを含んでいます。私はちょうどこのテーブルのすべてのオブジェクトを取得したい。しかし、それは動作しません。これは私のコードです、どうか私は間違っていることを教えてください?Androidカスタムコンテンツプロバイダ

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

とクラッシュアプ​​リは以下のようにコードを変更してみてください:
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クラスをご覧ください

関連する問題