首页 > 解决方案 > Android Room + AsyncTask 在执行中给出 doInBackground() 错误

问题描述

我试图在我的项目中使用 asyntask 来处理后台进程来整合空间。我不太了解房间数据库的这种异步发送。当我尝试插入虚拟数据时,我的应用程序崩溃了。这里给出错误跟踪和代码。请帮助我,我在哪里做错了?我用一个单独的项目尝试了这个,但它也崩溃了。帮助我找到如何使用 asynctask 解决房间问题。样品或解决方案非常受欢迎。

public class ReceiptsRepo {

private ReceiptsDao receiptDao;
private LiveData<List<Receipts>> mAllReceipts;

public ReceiptsRepo(Application application) {
    AppDatabase appDatabase = AppDatabase.getINSTANCE(application);
    receiptDao = appDatabase.receiptsDao();
    mAllReceipts = receiptDao.retrunAllReceipts();
}

public void insertReceipt(Receipts receipts){
    new InsertReceiptAsyncTask(receiptDao).execute(receipts);
}

public void updateReceipts(Receipts receipts){
    new updateReceiptsAsyncTask(receiptDao).execute(receipts);
}

public void deleteReceipts(Receipts receipts){
    new deleteReceiptsAsyncTask(receiptDao).execute(receipts);
}

public void deleteAllReceipts(){
    new deleteAllReceiptsAsyncTask(receiptDao).execute();
}

public LiveData<List<Receipts>> getmAllReceipts() {
    return mAllReceipts;
}

private static class InsertReceiptAsyncTask extends AsyncTask<Receipts, Void, Void> {

    private ReceiptsDao mReceiptsDao;
    private Receipts receipts;

    private InsertReceiptAsyncTask(ReceiptsDao receiptsDao){
        mReceiptsDao = receiptsDao;
    }

    @Override
    protected Void doInBackground(final Receipts... receipts) {
        mReceiptsDao.addReceiptsItem(receipts[0]);
        return null;
    }
}

private static class updateReceiptsAsyncTask extends AsyncTask<Receipts,Void, Void>{

    private ReceiptsDao mReceiptsDao;

    private updateReceiptsAsyncTask(ReceiptsDao receiptsDao) {
        mReceiptsDao = receiptsDao;
    }

    @Override
    protected Void doInBackground(Receipts... receipts) {
        mReceiptsDao.editReceiptsItem(receipts[0]);
        return null;
    }
}

private static class deleteReceiptsAsyncTask extends AsyncTask<Receipts, Void, Void>{

    private ReceiptsDao mReceiptsDao;

    private deleteReceiptsAsyncTask(ReceiptsDao receiptsDao) {
        mReceiptsDao = receiptsDao;
    }

    @Override
    protected Void doInBackground(Receipts... receipts) {
        mReceiptsDao.deleteReceiptsItem(receipts[0]);
        return null;
    }
}

private static class deleteAllReceiptsAsyncTask extends AsyncTask<Void, Void, Void>{

    private ReceiptsDao mReceiptsDao;

    private deleteAllReceiptsAsyncTask(ReceiptsDao receiptsDao) {
        mReceiptsDao = receiptsDao;
    }

    @Override
    protected Void doInBackground(Void... voids) {
        mReceiptsDao.deleteAllReceipts();
        return null;
    }
}
}



@Entity(tableName = "receipts")
public class Receipts {

@PrimaryKey(autoGenerate = true)
private int contract_id;

private String contractCode;
private String mobileNumber;
private String amount;
private String vehicleNumber;
private Boolean isPending;
private String defaultInterest;
private String fullBalance;
private String arrearsAmount;
private String dueAmount;
private String lastPayment;
private String recoveryCharges;
private String settlementAmount;
private String arrearsAge;
private String dueDay;
private String lastpayDay;
private String debit;
private String tax;
private String type;

public Receipts(int contract_id, String contractCode, String mobileNumber, String vehicleNumber, boolean isPending, String defaultInterest, String amount, String fullBalance, String arrearsAmount, String dueAmount, String lastPayment, String recoveryCharges, String settlementAmount, String arrearsAge, String dueDay, String lastpayDay, String debit, String tax, String type) {
    this.contract_id = contract_id;
    this.contractCode = contractCode;
    this.mobileNumber = mobileNumber;
    this.amount = amount;
    this.vehicleNumber = vehicleNumber;
    this.isPending = isPending;
    this.defaultInterest = defaultInterest;
    this.fullBalance = fullBalance;
    this.arrearsAmount = arrearsAmount;
    this.dueAmount = dueAmount;
    this.lastPayment = lastPayment;
    this.recoveryCharges = recoveryCharges;
    this.settlementAmount = settlementAmount;
    this.arrearsAge = arrearsAge;
    this.dueDay = dueDay;
    this.lastpayDay = lastpayDay;
    this.debit = debit;
    this.tax = tax;
    this.type = type;
}

public int getContract_id() {
    return contract_id;
}

public void setContract_id(int contract_id) {
    this.contract_id = contract_id;
}

public String getContractCode() {
    return contractCode;
}

public String getMobileNumber() {
    return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {
    this.mobileNumber = mobileNumber;
}

public String getAmount() {
    return amount;
}

public void setAmount(String amount) {
    this.amount = amount;
}

public String getVehicleNumber() {
    return vehicleNumber;
}

public void setVehicleNumber(String vehicleNumber) {
    this.vehicleNumber = vehicleNumber;
}

public Boolean getIsPending() {
    return isPending;
}

public void setIsPending(Boolean isPending) {
    this.isPending = isPending;
}

public void setContractCode(String contractCode) {
    this.contractCode = contractCode;
}

public String getDefaultInterest() {
    return defaultInterest;
}

public void setDefaultInterest(String default_interest) {
    this.defaultInterest = default_interest;
}

public String getFullBalance() {
    return fullBalance;
}

public void setFullBalance(String fullBalance) {
    this.fullBalance = fullBalance;
}

public String getArrearsAmount() {
    return arrearsAmount;
}

public void setArrearsAmount(String arrearsAmount) {
    this.arrearsAmount = arrearsAmount;
}

public String getDueAmount() {
    return dueAmount;
}

public void setDueAmount(String dueAmount) {
    this.dueAmount = dueAmount;
}

public String getLastPayment() {
    return lastPayment;
}

public void setLastPayment(String lastPayment) {
    this.lastPayment = lastPayment;
}

public String getRecoveryCharges() {
    return recoveryCharges;
}

public void setRecoveryCharges(String recoveryCharges) {
    this.recoveryCharges = recoveryCharges;
}

public String getSettlementAmount() {
    return settlementAmount;
}

public void setSettlementAmount(String settlementAmount) {
    this.settlementAmount = settlementAmount;
}

public String getArrearsAge() {
    return arrearsAge;
}

public void setArrearsAge(String arrearsAge) {
    this.arrearsAge = arrearsAge;
}

public String getDueDay() {
    return dueDay;
}

public void setDueDay(String dueDay) {
    this.dueDay = dueDay;
}

public String getLastpayDay() {
    return lastpayDay;
}

public void setLastpayDay(String lastpayDay) {
    this.lastpayDay = lastpayDay;
}

public String getDebit() {
    return debit;
}

public void setDebit(String debit) {
    this.debit = debit;
}

public String getTax() {
    return tax;
}

public void setTax(String tax) {
    this.tax = tax;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Receipts)) return false;
    Receipts receipts = (Receipts) o;
    if (contract_id != receipts.contract_id) return false;
    return contractCode != null ? contractCode.equals(receipts.contractCode) : receipts.contractCode == null;
}

@Override
public int hashCode() {

    int result = contract_id;
    result = 31 * result + (contractCode != null ? contractCode.hashCode() : 0);
    return result;
}

@NonNull
@Override
public String toString() {
    return "Receipts{" +
            "contract_id=" + contract_id +
            ", contractCode=" + contractCode +
            ", mobileNumber='" + mobileNumber + '\'' +
            ", amount='" + amount + '\'' +
            ", vehicleNumber='" + vehicleNumber + '\'' +
            ", isPending=" + isPending +
            ", defaultInterest='" + defaultInterest + '\'' +
            ", fullBalance='" + fullBalance + '\'' +
            ", arrearsAmount='" + arrearsAmount + '\'' +
            ", dueAmount='" + dueAmount + '\'' +
            ", lastPayment='" + lastPayment + '\'' +
            ", recoveryCharges='" + recoveryCharges + '\'' +
            ", settlementAmount='" + settlementAmount + '\'' +
            ", arrearsAge='" + arrearsAge + '\'' +
            ", dueDay='" + dueDay + '\'' +
            ", lastpayDay='" + lastpayDay + '\'' +
            ", debit='" + debit + '\'' +
            ", tax='" + tax + '\'' +
            ", type='" + type + '\'' +
            '}';
}
}

数据库类道[![堆栈跟踪

标签: androidandroid-asynctaskandroid-room

解决方案


请试试这个并检查你的日志会发生什么

public void insertReceipt(Receipts receipts){
    if(receipts!=null){
     new InsertReceiptAsyncTask(receiptDao).execute(receipts);
    }else{
      Log.d("Jamun"," Null");
    }
}

private static class InsertReceiptAsyncTask extends AsyncTask<Receipts, Void, Void> {

private ReceiptsDao mReceiptsDao;

private InsertReceiptAsyncTask(ReceiptsDao receiptsDao){
    mReceiptsDao = receiptsDao;
}

@Override
protected Void doInBackground(Receipts... receipts) {
    mReceiptsDao.addReceiptsItem(receipts[0]);
    return null;
  }
}

推荐阅读