Hier wird die Interaktion mit der Room-Datenbank sicher gestellt. Auf das Repository wird über das ViewModel zugegriffen. Zur Datenabfrage wird das DAO-Interface verwendet.
Die Datenoperationen werden für gewöhnlich in eigenen Threads ausgeführt. Um die Ergebnisse zurück in den Main-Thread zu holen benötigt man einen Handler und Looper.
Damit Methoden in neuen Threads ausgeführt werden können wird die Methode newSingleThreadExecuter() aus der Klasse Executer verwendet.
Beispiel:
import android.app.Application;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import androidx.lifecycle.MutableLiveData; import java.util.List;
import androidx.lifecycle.LiveData;
public class ArticleRepository {
private final MutableLiveData<List<Article>> searchResults= new MutableLiveData<>();
private List<Article> results;
private final LiveData<List<Article>> allArticles;
private final ArticleDao articleDao;
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
searchResults.setValue(results);
}
};
public ArticleRepository(Application application) {
AppRoomDatabase db;
db = AppRoomDatabase.getDatabase(application);
articleDao = db.articleDao();
allArticles = articleDao.getAllArticles();
}
public void insertArticle(Article newArticle) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> { articleDao.insertArticle(newArticle);});
executor.shutdown();
}
public void deleteArticle(String name) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> { articleDao.deleteArticle(name);});
executor.shutdown();
}
public void findArticle(String name) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
results = articleDao.findArticle(name);
handler.sendEmptyMessage(0);
});
executor.shutdown();
}
//Getter
public LiveData<List<Article>> getAllArticles() {
return allArticles;
}
public MutableLiveData<List<Article>> getSearchResults() {
return searchResults;
}
}