5

Ich entwickle eine Android-Anwendung, die eine Liste auf dem Bildschirm mit den Inhalten im Benutzerwörterbuch anzeigen soll.Zugriff auf UserDictionary Content Provider auf Android API Level 23

Das Problem ist, dass, wenn ich kompilieren und die Anwendung in der Android API Level 23 Content Provider ausführen einen Cursor ohne Element, ohne Daten.

Es ist seltsam, weil die API vor 23 (22, 21, 19, ...) die App ausgeführt wird und die Daten in der ListView normalerweise anzeigt.

Unten ist der Code meiner Aktivität:

import android.app.LoaderManager; 
import android.content.CursorLoader; 
import android.content.Loader; 
import android.database.Cursor; 
import android.provider.UserDictionary; 
import android.os.Bundle; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 

private ListView listView; 
private SimpleCursorAdapter adapter; 
private static final String[] COLUMNS = { 
     UserDictionary.Words.WORD, 
     UserDictionary.Words._ID, 
     UserDictionary.Words.LOCALE 
}; 

private static final int[] LIST_ITEM_VIEWS = { 
     R.id.name, 
     R.id.id_word, 
     R.id.locale 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView) findViewById(R.id.list); 

    adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.item_list, null, COLUMNS, LIST_ITEM_VIEWS, 0); 

    listView.setAdapter(adapter); 

    getLoaderManager().initLoader(0, null, this); 

} 

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    return new CursorLoader(getApplicationContext(), UserDictionary.Words.CONTENT_URI, COLUMNS, 
      null, null, UserDictionary.Words.WORD); 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    adapter.swapCursor(data); 

} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    adapter.swapCursor(null); 
} 
} 
+0

innen '' onLoadFinished' DatabaseUtils # dumpCursor' nennen, was sehen Sie? – pskink

+0

Wenn ich das DatabaseUtils.dumpCursor() verwende, bekomme ich die folgenden Returns: Auf API-Ebene 23 => "System.out:>>>>> Cursor Dumping android. Inhalt. $ @ B465803 ">>>>> Cursor Dumping android. Inhalt. $ CursorWrapperInner @ 1a8ca936 ContentResolver 0 { Wort = bluu _ id = 2 locale = null } 1 { Wort = blooo _id = 1 locale = de_DE } <<<<< " Auf API-Ebene 23, wenn ich die Methode getCount() vom Cursor-Objekt verwende, gibt die gleiche Null zurück. –

+0

Überprüfen Sie Ihre benutzerdefinierte ContentProvider- "Abfrage" -Methode, warum sie einen leeren Cursor zurückgibt – pskink

Antwort

0

Es gibt ein Problem auf API-Ebene 23, wo das Benutzerwörterbuch-Anbieter einen Cursor ohne Daten zurückgibt, selbst wenn das Wörterbuch bevölkert ist.

Eine aktuelle Arbeit ist um use a device or emulator running API level 22 or lower. Sie können schnell einen API-Level-22-Emulator erstellen.

2

Dies wurde hier berichtet: Android Issue Traker

Offizielle Antwort: wie vorgesehen arbeiten. Diese Funktion wurde seit API 23 effektiv entfernt.