2016-05-21 21 views
0

Ich entwickle Custom Content Provider in meiner App. Und Gesicht issuel, wenn Liste vom kundenspezifischen Inhaltsanbieter erhalten. Detail, mein benutzerdefinierter Inhaltsanbieter enthält eine Tabelle. Ich möchte nur alle Objekte in dieser Tabelle bekommen. Aber es funktioniert nicht. Das ist mein Code, bitte zeig mir was ich falsch mache?Android Custom Content 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; 
} 

In Methode onAdd(), es funktioniert gut. Aber mit der Methode getList, es zeigen Protokoll, Abfrage-Funktion heißt sehr Zeit. und Crash-App mit der Meldung E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! 05-21 11:07:43.661 5876-5876/? E/AndroidRuntime: Error reporting crash android.os.TransactionTooLargeException

Antwort

1

Versuchen Sie den Code zu ändern sein, wie folgt:
Cursor c = getContentResolver().query(uri,null,null,null,null); String res= ""; while(c.moveToNext()){ res += c.getString(0); } c.close(); Log.i(TAG,res);

Das eigentliche Problem ist, dass Ihr Content-Provider ist nur endlos in Ihrer Abfragemethode Looping. Sie müssen die SQL-Anweisung hier ausführen und nicht den Content-Resolver aufrufen. Werfen Sie einen Blick auf this Klasse