使用Retrofit2解析字符串数组

时间:2018-10-16 15:52:15

标签: java android http retrofit retrofit2

我是新手,但我在解析某些字符串数组时遇到问题,这些字符串数组是JSON响应的一部分。

这是JSON响应。

{
"positive": [
    "Relaxed",
    "Uplifted",
    "Hungry",
    "Sleepy",
    "Tingly"
],

"medical": [
    "Eye Pressure",
    "Insomnia",
    "Stress",
    "Fatigue",
    "Headaches"
]
}

我该如何处理?

先谢谢您了:)

2 个答案:

答案 0 :(得分:0)

您需要创建如下所示的POJO类

public  class  ExampleResponse  {

private  List < String >  positive  =  null;
private  List < String >  medical  =  null;

public  List < String >  getPositive() {
    return  positive;
}

public  void  setPositive(List < String >  positive) {
    this.positive  =  positive;
}

public  List < String >  getMedical() {
    return  medical;
}

public  void  setMedical(List < String >  medical) {
    this.medical  =  medical;
}

}

运行良好。

答案 1 :(得分:0)

通过查看您的评论,我认为您的POJO类是正确的,但是您将它与Retrofit调用一起使用的方式是错误的。确保POJO类如下所示,

const re = /^(?=\w{6,})(?=.*\d{2})/;
console.log(re.test('23foob'));
console.log(re.test('foob23'));
console.log(re.test('aa1b23'));

并使用上面的POJO类。

您的API接口

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Foo {

    @SerializedName("positive")
    @Expose
    private List<String> positive = null;
    @SerializedName("medical")
    @Expose
    private List<String> medical = null;

    public List<String> getPositive() {
        return positive;
    }

    public List<String> getMedical() {
        return medical;
    }

}

下次使用API​​接口

import retrofit2.Call;
import retrofit2.http.GET;

public interface FooApiInterface {

    /* pass POJO class to Call<> */

    @GET("request/url")
    Call<Foo> getFoo(/* parameters for the request if there any */);

    /* other api calls here */
}

请注意,这里我使用FooApiInterface client = ...; // initialization Call<Foo> fooCall = client.getFoo(); fooCall.enqueue( new Callback<Foo>() { @Override public void onResponse(@NonNull Call<Foo> call, @NonNull Response<Foo> response) { if (response.isSuccessful()) { List<String> positiveList = response.body().getPositive(); List<String> medicalList = response.body().getMedical(); } } @Override public void onFailure(@NonNull Call<Foo> call, @NonNull Throwable t) { Log.e("error", "API Error ", t); } } ); POJO类作为Foo的参数,而不是Call(如您的代码中使用的)。如果您按照上述说明修改代码,则可以消除错误

  

java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第2列路径$错误处为BEGIN_OBJECT

出于演示目的,我使用了List<Strain>示例。根据您的要求进行更改。