预期为BEGIN_ARRAY,但位于第1行第2列路径$ STRING

时间:2019-06-22 07:10:18

标签: java android retrofit

我有一个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;
    }
}

sortfilter还有2种型号。我使用翻新和RXJava。

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

我使用构造函数设置了SendParametersGetData(在此示例中仅设置了ViewNameParameters),并将其作为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 个答案:

答案 0 :(得分:2)

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

Parameters需要重命名为parameters以与JSON密钥匹配。

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

我猜这应该可以解决您的问题。我认为其他模型类都不错。