Почему массив кажется пустым, когда я начинаю занятие, несмотря на наличие объектов? - PullRequest
1 голос
/ 14 февраля 2020

Я работаю с 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...