Ошибка: конструктор в классе не может быть применен к данным типам - PullRequest
0 голосов
/ 05 июня 2018

Как вставить данные в базу данных с первичным ключом (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 , подтвердите любое исправление.Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2018

Согласно источнику: https://developer.android.com/reference/android/app/Activity#getIntent() Intent getIntent (): вернуть намерение, с которого началось действие.Таким образом, вместо использования (new Intent ()) getIntent () будет работать лучше в случае startActivityForResult.

и для @Primarykey ( autoGenerate = True ) используйте0 (ноль).Согласно источнику https://developer.android.com/reference/android/arch/persistence/room/PrimaryKey.html#autoGenerate() Если тип поля long или int (или его TypeConverter преобразует его в long или int), методы вставки обрабатывают 0 (ноль) как не установленный при вставке элемента.например:

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

наконец я решил свою проблему сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...