Sto sviluppando un'applicazione Android che mira a mostrare un elenco sullo schermo con i contenuti presenti nel dizionario utente.Accesso al provider di contenuti UserDictionary su livello API Android 23
Il problema è che quando compilo ed eseguo l'applicazione nell'API Android, il Content Provider di Livello 23 restituisce un cursore senza elementi, senza dati.
È strano perché l'API precedente 23 (22, 21, 19, ...) l'app viene eseguita e visualizza normalmente i dati in ListView.
Di seguito si riporta il codice della mia attività:
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);
}
}
all'interno 'onLoadFinished' chiamare' DatabaseUtils # dumpCursor', cosa vedi? – pskink
Quando utilizzo DatabaseUtils.dumpCursor() ottengo i seguenti ritorni: On API level 23 => "System.out:>>>>> cursore Scaricamento contenuto Android. $ @ B465803" content>>>>> cursore dumping Android.. $ CursorWrapperInner @ 1a8ca936 ContentResolver 0 { Word = bluu _ id = 2 locale = null } 1 { Word = blooo _ID = 1 locale = it } <<<<<" Al livello API 23 quando utilizzo il metodo getCount() dall'oggetto Cursor, lo stesso restituisce zero. –
quindi controlla il metodo "query" di ContentProvider personalizzato perché restituisce un Cursore vuoto – pskink