I have this repository code down below, where I additionally would like to have function to return me cart items by querying to database (here I have used Room) such that it returns: Select * from cart where cartId = {{id}}
How do I write the function on AsyncTask and return value from there?
Repository class:
package com.threedebuggers.foodrush.repositories;
import android.app.Application;
import android.os.AsyncTask;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.threedebuggers.foodrush.Interface.CartDao;
import com.threedebuggers.foodrush.Objects.Cart;
import com.threedebuggers.foodrush.helpers.DatabaseClient;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class CartDbRepository {
private CartDao cartDao;
private LiveData<List<Cart>> allCartItems;
public CartDbRepository(Application application) {
DatabaseClient db = DatabaseClient.getInstance(application);
cartDao = db.getAppDatabase().taskDao();
allCartItems = cartDao.getItems();
}
public LiveData<List<Cart>> getAllCartItems() {
return allCartItems;
}
public void insert(Cart cart) { new InsertCartAsyncTask(cartDao).execute(cart); }
public void update(Cart cart) {
new UpdateCartAsyncTask(cartDao).execute(cart);
}
public void delete(Cart cart) {
new DeleteCartAsyncTask(cartDao).execute(cart);
}
private static class InsertCartAsyncTask extends AsyncTask<Cart, Void, Void> {
private CartDao cartDao;
private InsertCartAsyncTask(CartDao cartDao){
this.cartDao = cartDao;
}
@Override
protected Void doInBackground(Cart... carts) {
cartDao.insert(carts[0]);
return null;
}
}
private static class UpdateCartAsyncTask extends AsyncTask<Cart, Void, Void> {
private CartDao cartDao;
private UpdateCartAsyncTask(CartDao cartDao){
this.cartDao = cartDao;
}
@Override
protected Void doInBackground(Cart... carts) {
cartDao.update(carts[0]);
return null;
}
}
private static class DeleteCartAsyncTask extends AsyncTask<Cart, Void, Void> {
private CartDao cartDao;
private DeleteCartAsyncTask(CartDao cartDao){
this.cartDao = cartDao;
}
@Override
protected Void doInBackground(Cart... carts) {
cartDao.delete(carts[0]);
return null;
}
}
}
My DAO Class:
package com.threedebuggers.foodrush.Interface;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;
import com.threedebuggers.foodrush.Objects.Cart;
import java.util.List;
@Dao
public interface CartDao {
@Query("SELECT * FROM Cart")
LiveData<List<Cart>> getItems();
@Query("SELECT * FROM Cart WHERE itemId =:Id")
Cart getItemById(Integer Id);
@Insert
void insert(Cart cart);
@Delete
void delete(Cart cart);
@Update
void update(Cart cart);
}