Как передать данные int с намерением? - PullRequest
0 голосов
/ 19 ноября 2018

Привет! Я делаю проект и использую постоянное пространство для управления своей базой данных, но когда я получаю идентификатор из своего действия, чтобы передать его другому действию для редактирования данных, это дает несовместимые типы

Вот мой DaoClass, я хочу вызвать методы getOne

 @Insert
void insert(Entradas entradas);

@Update
void update(Entradas entradas);

@Delete
void delete(Entradas entradas);

@Query("DELETE FROM Entradas")
void deleteAll();

@Query("SELECT * FROM Entradas")
LiveData<List<Entradas>> getAll();  

@Query("SELECT * FROM Entradas WHERE IdEntrada ==:Id")
LiveData<Entradas> getOne(int Id);

Вот мое действие, когда я использую методы longClickListener, чтобы отправить меня к другому действию

        adapter.addActionCallback(new EntradasAdapter.ActionCallback() {
        @Override
        public void onLongClickListener(Entradas entradas) {
            Intent intent = new Intent(getActivity(), UpdateEntradaActivity.class);
            intent.putExtra(UpdateEntradaActivity.EXTRA_ENTRADA_ID,  entradas.getIdEntrada());
            startActivity(intent);
        }
    });

Иэто действие, которое я хочу показать данные

public static String EXTRA_ENTRADA_ID = "IdEntrada";

private Button btnCalendario, btnCrear;
private EditText etNombre, etSaldo;
private TextView etFecha;
Calendar c;
DatePickerDialog dpd;
private CategoriaEntradasViewModel viewModel;
private CuentasViewModel viewModel1;
private EntradasViewModel viewModel2;
Spinner spinner, spinner1;
List<CategoriaEntradas> categoriaEntradas1;
List<Cuentas> cuentas1;
private EntradasDao mEntradasDAO;
private Entradas ENTRADAS;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_entrada);

    getSupportActionBar().setTitle(Html.fromHtml("<font color='#FFFFFF'>"+"Editar Entrada"+"</font>"));
    getSupportActionBar().setElevation(0);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    mEntradasDAO = Room.databaseBuilder(this, Database.class, "Database")
            .allowMainThreadQueries()       //Allows room to do operation on main thread
            .build()
            .entradasDao();

    final Context ctx = this;
    etNombre= findViewById(R.id.editText);
    etSaldo= findViewById(R.id.editText4);
    etFecha = (TextView) findViewById(R.id.txtFecha);
    btnCalendario= (Button) findViewById(R.id.btnFecha);
    btnCrear = findViewById(R.id.btnCrear);



    ENTRADAS = mEntradasDAO.getOne(getIntent().getStringExtra(EXTRA_ENTRADA_ID));
}

Ошибка в последней строке ENTRADAS = mEntradasDAO.getOne(getIntent().getStringExtra(EXTRA_ENTRADA_ID));

там написано getOne(int) in EntradasDao cannot be applied to java.lang.String

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы ставите как Int, а во время чтения пытаетесь получить как String.Заменить

    mEntradasDAO.getOne(getIntent().getStringExtra(EXTRA_ENTRADA_ID));
with 
    mEntradasDAO.getOne(getIntent().getIntExtra(EXTRA_ENTRADA_ID,0));
0 голосов
/ 19 ноября 2018

Способ чтения этого сообщения - «метод getOne() принимает int, но вы передаете java.lang.String». Таким образом, вы должны выяснить, почему передаваемое вами значение равно String.

ENTRADAS = mEntradasDAO.getOne(getIntent().getStringExtra(EXTRA_ENTRADA_ID));

В вашем случае, однако, это довольно просто. Вы передаете ему значение getStringExtra() вызова, которое всегда будет String.

Есть два пути, чтобы исправить это. То, что вы выберете, будет зависеть от того, является ли значение, которое вы вводите в Intent, на самом деле String или int.

intent.putExtra(UpdateEntradaActivity.EXTRA_ENTRADA_ID,  entradas.getIdEntrada());

Если entradas.getIdEntrada() - это int, то вы можете изменить другую сторону, чтобы просто получить int extra:

ENTRADAS = mEntradasDAO.getOne(getIntent().getIntExtra(EXTRA_ENTRADA_ID, 0));

Если entradas.getIdEntrada() является String, то вам придется изменить другую сторону, чтобы получить String, а затем проанализировать его как int

String idString = getIntent().getStringExtra(EXTRA_ENTRADA_ID);
int idInt = Integer.parseInt(idString);
ENTRADAS = mEntradasDAO.getOne(idInt);

Редактировать

Как упоминалось в комментариях, возвращаемое значение метода getOne() является LiveData<Entradas>, а не просто Entradas. Хотя это не рекомендуемый способ использования LiveData, для целей этого вопроса вы можете получить значение, вызвав getValue().

int idInt = getIntent().getIntExtra(EXTRA_ENTRADA_ID, 0);
ENTRADAS = mEntradasDAO.getOne(idInt).getValue();
String idString = getIntent().getStringExtra(EXTRA_ENTRADA_ID);
int idInt = Integer.parseInt(idString);
ENTRADAS = mEntradasDAO.getOne(idInt).getValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...