5

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); 
} 
} 
+0

all'interno 'onLoadFinished' chiamare' DatabaseUtils # dumpCursor', cosa vedi? – pskink

+0

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. –

+0

quindi controlla il metodo "query" di ContentProvider personalizzato perché restituisce un Cursore vuoto – pskink

risposta

0

C'è un problema a livello di API 23 in cui il fornitore dizionario utente restituisce un cursore con nessun dato, anche quando il dizionario è popolato.

Un lavoro corrente è a use a device or emulator running API level 22 or lower. È possibile creare rapidamente un emulatore di livello API 22.

2

Questo è stato segnalato qui: Android Issue Traker

Risposta ufficiale: Lavorare come previsto. Questa funzionalità è stata rimossa in modo efficace dall'API 23.