Я работаю с BD rom или DAo, каждый звонит ей по-своему. Это список покупок с 2 действиями: 1 recycleView и еще один для добавления. Когда вы запускаете приложение, идея состоит в том, чтобы проверить, есть ли что-то в базе данных или в массиве утилизатора, если есть, затем запустите его, а если нет, то go к операции, которую нужно добавить. Проблема в том, что даже имея продукты, это говорит мне, что их нет. Я оставляю код Это основной
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 10;
private RecyclerView rv1;
private AdaptadorProducto adaptador;
private List<Producto> datos = new ArrayList<>();
private Context contexto;
private ListaCompraViewModel listaCompraViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
contexto = this;
setContentView(R.layout.activity_main);
listaCompraViewModel =
ViewModelProviders.of(this).get(ListaCompraViewModel.class);
rv1 = findViewById(R.id.rv1);
adaptador = new AdaptadorProducto(this, datos);
rv1.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
rv1.setHasFixedSize(true);
rv1.setAdapter(adaptador);
registerForContextMenu(rv1);
listaCompraViewModel.getProductos().observe(this, adaptador::setDatos);
if (datos.isEmpty()) {
Toast.makeText(this, "La lista de la compra esta vacia le enviamos a la opcion de añadir",
Toast.LENGTH_SHORT).show();
Intent i = new Intent(this, NuevoProductoActivity.class);
startActivityForResult(i, REQUEST_CODE);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
int posicion = -1;
try {
posicion = adaptador.getPosicion();
} catch (Exception e) {
return super.onContextItemSelected(item);
}
switch (item.getItemId()) {
case R.id.mi1:
Snackbar.make(this.rv1, "Se ha elegido borrar el elemento " + posicion, Snackbar.LENGTH_LONG)
.show();
Producto p = adaptador.getDatos().get(posicion);
new borrarProducto(BaseDatosApp.getInstance(contexto)).execute(p);
adaptador.notifyDataSetChanged();
if (datos.isEmpty()) {
AlertDialog.Builder dialogo1 = new AlertDialog.Builder(this);
dialogo1.setTitle("Infornacion");
dialogo1.setMessage("La lista de la compra esta vacia añada un producto o salga de la aplicacion");
dialogo1.setCancelable(false);
dialogo1.setPositiveButton("Añadir", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogo1, int id) {
añadir();
}
});
dialogo1.setNegativeButton("Salir", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogo1, int id) {
finish();
}
});
dialogo1.show();
}
break;
case R.id.mi2:
añadir();
}
return super.onContextItemSelected(item);
}
public void añadir() {
Intent i = new Intent(this, NuevoProductoActivity.class);
startActivityForResult(i, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
Producto nProducto = (Producto) data.getExtras().getSerializable("Producto");
new insertarProducto(BaseDatosApp.getInstance(contexto)).execute(nProducto);
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
adaptador.notifyDataSetChanged();
Snackbar snackbar = Snackbar.make(rootView, "Se ha insertado un nuevo registro.", Snackbar.LENGTH_LONG);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
snackbar.show();
}
}
class borrarProducto extends AsyncTask { private final BaseDatosApp database;
public borrarProducto(BaseDatosApp database) {
this.database = database;
}
@Override
protected Void doInBackground(final Producto... params) {
database.productoDAO().delete(params[0]);
return null;
}
}
class insertarProducto extends AsyncTask { private final BaseDatosApp database;
public insertarProducto(BaseDatosApp database) {
this.database = database;
}
@Override
protected Void doInBackground(final Producto... params) {
database.productoDAO().insertAll(params);
return null;
}
DB
@Database(entities = {Producto.class}, version = 1, exportSchema = false)
public abstract class BaseDatosApp extends RoomDatabase { private static BaseDatosApp INSTANCIA;
public static BaseDatosApp getInstance(Context context) {
if (INSTANCIA == null) {
INSTANCIA = Room.databaseBuilder(
context.getApplicationContext(),
BaseDatosApp.class,
"dbCompra")
.build();
}
return INSTANCIA;
}
public static void destroyInstance() {
INSTANCIA = null;
}
другой класс
ListaCompraViewModel extends AndroidViewModel {
private final LiveData<List<Producto>> productos;
public ListaCompraViewModel(@NonNull Application application) {
super(application);
productos = BaseDatosApp
.getInstance(application)
.productoDAO().getAll();
}
public LiveData<List<Producto>> getProductos() {
return productos;
}
public abstract ProductoDAO productoDAO();