Android 如何传递有意图的int数据?

Android 如何传递有意图的int数据?,android,android-room,Android,Android Room,嗨,我正在做一个项目,我正在使用room persistence来管理我的数据库,但是当我从我的活动中获取id并将其传递给另一个活动以编辑数据时,它会提供不兼容的类型 这是我的DAO类,我想调用getOne Methodos @Insert void insert(Entradas entradas); @Update void update(Entradas entradas); @Delete void delete(Entradas entradas); @Query("DELET

嗨,我正在做一个项目,我正在使用room persistence来管理我的数据库,但是当我从我的活动中获取id并将其传递给另一个活动以编辑数据时,它会提供不兼容的类型

这是我的DAO类,我想调用getOne Methodos

 @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);
这就是我想要显示数据的活动

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.getOnegetIntent.getStringExtraEXTRA\u ENTRADA\u ID


它说EntradasDao中的getOneint不能应用于java.lang.String

读取该消息的方法是getOne接受int,但传递的是java.lang.String。因此,您必须弄清楚为什么要传递的值是字符串

不过,在你的情况下,这是相当简单的。您正在向它传递getStringExtra调用的值,该调用始终是字符串

解决这一问题有两条途径。选择哪一个取决于您输入到Intent中的值实际上是字符串还是int

如果entradas.getIdEntrada是一个int,那么您可以将事物的另一面更改为只检索一个int额外值:

如果entradas.getIdEntrada是一个字符串,则必须更改另一侧以检索该字符串,然后将其解析为int

编辑 如注释中所述,getOne方法的返回值是一个LiveData,而不仅仅是一个Entradas。虽然这不是使用LiveData的推荐方法,但出于本问题的目的,您可以通过调用getValue来检索该值


您正在以Int形式输入,并在读取时尝试以字符串形式获取。 替换


现在它说需要不兼容的类型:Entities.Entradas Find:lifecycle.LiveDataNow它说需要不兼容的类型:Entities.Entradas Find:lifecycle.LiveDataLiveData对象的工作方式超出了这个问题的范围,但是您可以通过调用getValue来获取LiveData的当前值。所以你可以说ENTRADAS=mEntradasDAO.getoneidit.getValue;谢谢,但是现在我在另一个活动中变为空
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));
intent.putExtra(UpdateEntradaActivity.EXTRA_ENTRADA_ID,  entradas.getIdEntrada());
ENTRADAS = mEntradasDAO.getOne(getIntent().getIntExtra(EXTRA_ENTRADA_ID, 0));
String idString = getIntent().getStringExtra(EXTRA_ENTRADA_ID);
int idInt = Integer.parseInt(idString);
ENTRADAS = mEntradasDAO.getOne(idInt);
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();
    mEntradasDAO.getOne(getIntent().getStringExtra(EXTRA_ENTRADA_ID));
with 
    mEntradasDAO.getOne(getIntent().getIntExtra(EXTRA_ENTRADA_ID,0));