2017-11-01 1 views
0

Was ist die beste Vorgehensweise zum Abrufen von Daten von Room SQLite von einem neuen Thread zum Haupt-UI-Thread in Android?Implementieren von SQLIte in einem neuen Thread

+1

Die 2 häufigsten Möglichkeiten: 1. Verwenden Sie Livedata als Rückgabetyp für dao Abfragen. Der Raum kümmert sich automatisch um das Laden des Hintergrundfadens. 2. Setzen Sie die DAO-Abfrage in eine AsyncTask. Nicht sicher, ob das ist, was du fragst, also überlasse ich es als Kommentar. – reTs

+0

Können wir eine Methode im UI-Thread innerhalb von AysncTask als Rückruf nach Datenabruf aufrufen? –

+1

Natürlich. onPostExecute wird aufgerufen, nachdem die AsyncTask beendet und im UI-Thread aufgerufen wurde. – reTs

Antwort

1

Eine kleine Erinnerung: Diese AsyncTask-Lösung dient nur zur schnellen Implementierung für einige Abfragen. Wenn Sie viele verschiedene Abfragen haben, versuchen Sie nicht, eine Reihe von AsyncTask-Unterklassen zu erstellen. Sehen Sie sich den LiveData-Weg genauer an oder verwalten Sie selbst einen Thread.


Vorausgesetzt, dass Sie für die Liste aller Benutzer abfragen:

@Dao 
public interface UserDao { 
    @Query("Select * FROM User") 
    List<User> findAll(); 
} 

Probe async Aufgabe

private static class UserTask extends AsyncTask<Void, Void, List<User>> { 
    UserDao dao; 

    public UserTask(UserDao dao) { 
     this.dao = dao; 
    } 

    @Override 
    protected List<User> doInBackground(Void... voids) { 
     // this function runs in a background thread managed by system 
     return dao.findAll(); 
    } 

    @Override 
    protected void onPostExecute(List<User> users) { 
     // This runs in UI thread after doInBackground return. Run your ui callback here 
     super.onPostExecute(users); 
    } 
} 
Verwandte Themen