【问题标题】:Error: constructor in class cannot be applied to given types错误:类中的构造函数不能应用于给定类型
【发布时间】:2018-06-06 18:23:29
【问题描述】:

如何在主键为(autoGenerate= true)的数据库中插入数据?

这是表格的代码

@Entity(tableName = "Account")
 public class Account {

@PrimaryKey(autoGenerate = true)
@ColumnInfo(index = true, name="ACCOUNT_ID")
public int id;

@NonNull
@ColumnInfo
private String bank;

@NonNull
@ColumnInfo
private String bal;

public Account(int id, String bank, String bal) {
    this.id = id;
    this.bank = bank;
    this.bal = bal;}

public int getId(){return this.id;}
public String getBank(){return this.bank;}
public String getBal(){return this.bal;}
}

TableDao

@Dao
public interface AccountDao {
@Query("SELECT * from Account ORDER BY bank ASC")
LiveData<List<Account>> getAlphabetizedAccounts();


@Insert(onConflict = OnConflictStrategy.ABORT)
void insert(Account account);

@Query("DELETE FROM Account")
void deleteAll();
}

在 startActivityForResult 中,我正在尝试获取 EditTextView 数据,例如

    final Button save = findViewById(R.id.btn_save);
    save.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent replyIntent = new Intent();
            if (TextUtils.isEmpty(EtBankName.getText()) && TextUtils.isEmpty(EtBalView.getText())) {
                setResult(RESULT_CANCELED, replyIntent);
            } else {
                String bankName = EtBankName.getText().toString();
                String bal = EtBalView.getText().toString();
                replyIntent.putExtra(_BANK_NAME, bankName);
                replyIntent.putExtra(_AC_BAL, bal);
                setResult(RESULT_OK, replyIntent);
            }
            Intent balIntent = new Intent();
            if (TextUtils.isEmpty(EtBankName.getText()) && TextUtils.isEmpty(EtBalView.getText())) {
                setResult(RESULT_CANCELED, replyIntent);
            } else {
                String bal = EtBalView.getText().toString();
                replyIntent.putExtra(_AC_BAL, bal);
                setResult(RESULT_OK, balIntent);
            }

            finish();
        }
    });

而 onActivityresult 我正在这样做

  public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == NEW_ACCOUNT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
    Account account = new Account(data.getStringExtra(NewAccountActivity._BANK_NAME),data.getStringExtra(NewAccountActivity._AC_BAL));
    mAccountViewModel.insert(account);
} else {
    Toast.makeText(
            getApplicationContext(),
            R.string.empty_not_saved,
            Toast.LENGTH_LONG).show();
  }
 }
}

Error Line:Account account = new Account(data.getStringExtra(NewAccountActivity._BANK_NAME),data.getStringExtra(NewAccountActivity._AC_BAL));

我已经尝试了所有删除添加但没有解决方案。我的构造函数有三个参数,我提供了两个。如何克服 auto Id 的问题,请接受任何更正。提前致谢。

【问题讨论】:

  • 尽可能粘贴所有代码,不会让你到任何地方。
  • 编译错误确实为您提供了您需要知道的一切。您定义了一个带有 3 个参数的 Account 构造函数,但在 MainActivity 的第 87 行,您尝试使用带有 2 个参数的构造函数并且该构造函数不存在,因此编译错误。
  • @Igor llin 在我的问题 ID 中设置为自动生成,然后我将如何设置。

标签: java android android-room


【解决方案1】:

根据来源:https://developer.android.com/reference/android/app/Activity#getIntent() Intent getIntent():返回启动活动的意图。 因此,在 startActivityForResult 的情况下,getIntent() 会更好地工作,而不是使用 (new Intent())。

对于 @Primarykey(autoGenerate = True) 使用 0(零)。根据来源https://developer.android.com/reference/android/arch/persistence/room/PrimaryKey.html#autoGenerate() 如果字段类型是 long 或 int(或其 TypeConverter 将其转换为 long 或 int),则 Insert 方法在插入项目时将 0(零)视为未设置。 例如:

Table table =new Table(0, data1, data2,..);
mTable.insert(table);

最后我自己解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2019-10-05
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多