You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AsyncTask中doInBackground返回自定义类列表的类型不兼容错误

解决AsyncTask返回类型不兼容的问题

你遇到的attempted to use incompatible return type错误,本质是两个地方的类型不匹配导致的,我帮你拆解并修正:

错误原因分析

  1. AsyncTask泛型参数不匹配
    AsyncTask的三个泛型参数定义是:AsyncTask<Params, Progress, Result>,其中第三个参数Result必须和doInBackground的返回类型完全一致。你现在把Result设成了String,但doInBackground返回的是List<ReadingModel>,类型直接冲突。

  2. ReadingModel内部类List的泛型错误
    你定义的ReadingModel.List继承自ArrayList<MobilePostModel>,但你实际需要的是装ReadingModel的列表,这个泛型类型写错了,导致后续返回的列表类型和预期不匹配。

修正步骤

步骤1:修正ReadingModel的内部类

把内部类List的泛型改为ReadingModel,确保它是专门用来装当前模型的列表容器:

public class ReadingModel {
    @SerializedName("BillID")
    @Expose
    private String BillID;
    @SerializedName("Mablagh")
    @Expose
    private String Mablagh;
    @SerializedName("PayID")
    @Expose
    private String PayID;

    public String getBillID() {return BillID;}
    public void setBillID(String BillID){this.BillID=BillID;}
    public String getMablagh(){return Mablagh;}
    public void setMablagh(String Mablagh){this.Mablagh=Mablagh;}
    public String getPayID(){return PayID;}
    public void setPayID(String PayID){this.PayID=PayID;}

    // 修正泛型类型为ReadingModel
    public static class List extends ArrayList<ReadingModel> {} 
}

步骤2:修正AsyncTask的泛型参数

把AsyncTask的第三个泛型参数从String改成List<ReadingModel>,让它和doInBackground的返回类型一致:

private class AsyncRead extends AsyncTask<GetReadingTask, Void, List<ReadingModel>> {
    ReadingModel.List x;

    @Override
    protected List<ReadingModel> doInBackground(GetReadingTask... getReadingTasks) {
        ir.behineh.wepapiinterface.GETREADINGINTERFACE.GetReading taskService=
            ServiceGenerator.createService(ir.behineh.wepapiinterface.GETREADINGINTERFACE.GetReading.class);
        Call<ReadingModel.List> tasks=taskService.getReadings("application/x-www-form-urlencoded","application/json","bearer ");
        
        try {
            x=tasks.execute().body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return x;
    }

    // 可选:推荐用onPostExecute异步处理结果,避免阻塞主线程
    @Override
    protected void onPostExecute(List<ReadingModel> result) {
        super.onPostExecute(result);
        // 在这里处理返回的列表,比如更新UI
    }
}

步骤3:修正调用代码(可选优化)

你当前用get()方法会阻塞主线程,容易导致ANR(应用无响应),建议改用onPostExecute处理结果。如果一定要用get(),记得捕获异常:

try {
    List<ReadingModel> List_result = new AsyncRead().execute(params).get();
    // 处理结果
} catch (ExecutionException | InterruptedException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者behzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:57:03