当前位置: 首页 > 知识库问答 >
问题:

应为BEGIN\u数组,但在第1行第2列路径处为字符串$

阎彬炳
2023-03-14

我有一个API,为了获取数据,我必须发送一个JSON参数。这是必须在@body中发送才能获取数据的JSON。

{
    "ViewName": "Members_HousholdAdmin",
    "DataRequest":{
      "filter":[{
        "field":"",
        "logic":"",
        "operator":"",
        "value":""
       }],
        "offset":0,"take":0,
        "Sort":[{"field":"","dir":""}]
    },
    "parameters":[
    {"key": "%FundId","value": "1" }
    ]
}

它在postman中工作,但在Android中,我有以下错误:

Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $

我想这是我的模型中的一个问题,但我无法修复它。

我的型号:

public class SendParametersGetData {

    @SerializedName("ViewName")
    public String ViewName;

    @SerializedName("DataRequest")
    public DataRequest DataRequest = null;


    @SerializedName("Parameters")
    public List<Parameters> parameters = null;
}

public class DataRequest  {
    @SerializedName("take")
    public int take=0;

    @SerializedName("offset")
    public int offset=0;

    @SerializedName("filter")
    public ArrayList<Filter> filter;

    @SerializedName("Sort")
    public ArrayList<Sort> Sort;
}

public class Parameters {

    @SerializedName("value")
    public String value;

    @SerializedName("key")
    public String key;

    public Parameters(String key, String value) {
        this.value = value;
        this.key = key;
    }
}

还有两种型号用于排序和筛选。我使用改装

@POST("test.php")
Single<ArrayList<Members>> getMembers(@Body SendParametersGetData sendParametersGetData);

我使用构造函数设置SendParametersGetData(在本例中,仅设置了视图名和参数),并将其作为输入提供给getMembers方法。

ArrayList<Parameters> parameters = new ArrayList<>();
parameters.add(new Parameters("%FundId",String.valueOf(fund.getFundId())));
SendParametersGetData sendParametersGetData = new SendParametersGetData("Members_HousholdAdmin",parameters);
dataSource.getMembers(sendParametersGetData).subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new SingleObserver<ArrayList<Members>>() {
            @Override
            public void onSubscribe(Disposable d) {
                compositeDisposable.add(d);
            }

            @Override
            public void onSuccess(ArrayList<Members> members) {
            }

            @Override
            public void onError(Throwable e) {
                view.hideProgress();
                TastyToast.makeText(view.getContext(), e.toString(), 6000, TastyToast.ERROR);
            }
        });

共有1个答案

百里承业
2023-03-14

我在您的模型类中发现了以下错误。

参数需要重命名为参数以与JSON键匹配。

@SerializedName("parameters")
public List<Parameters> parameters = null;

我想这应该可以解决你的问题。我认为其他模型类很好。

 类似资料: