如何使用Retrofit 2从JSON列表中获取List <string>?

时间:2017-06-05 06:39:31

标签: android json retrofit

我是Android新手。我需要从JSON列表中获取字符串列表。它将添加到Spinner列表中。我在服务器上有列表

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}]. 

尝试使用Retrofit Scalars。 回复为

[{"bgroup":"A+"},{"bgroup":"A1+"},{"bgroup":"A1-"}]

但错误检测为:

  

预期一个字符串,但在第1行第3列路径为BEGIN_OBJECT $ [0] *

从JSON中检索字符串列表的更好方法是什么?

2 个答案:

答案 0 :(得分:0)

这是示例代码:

 GroupService groupService = createService(GroupService.class);

 Call<List<Groups>> groupCall = groupService.getGroups();

    groupCall.enqueue(new Callback<List<Groups>>() {
            @Override
            public void onResponse(retrofit.Response<List<Groups>> response, Retrofit retrofit) {


            }

            @Override
            public void onFailure(Throwable t) {
                t.printStackTrace();

            }
        });

接口:

public interface GroupService {

@GET("<URL>")
Call<List<Groups>> getGroups();
}

同时创建模型名称Groups。

我希望这会对你有所帮助。

答案 1 :(得分:0)

制作以下模型类(parcelable)

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example implements Parcelable {

@SerializedName("bgroup")
@Expose
private String bgroup;

public String getBgroup() {
return bgroup;
}

public void setBgroup(String bgroup) {
this.bgroup = bgroup;
}


    protected Example(Parcel in) {
        bgroup = in.readString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(bgroup);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<Example> CREATOR = new Parcelable.Creator<Example>() {
        @Override
        public Example createFromParcel(Parcel in) {
            return new Example(in);
        }

        @Override
        public Example[] newArray(int size) {
            return new Example[size];
        }
    };
}

比这样创建接口类

public interface ApiService {

@GET("<URL>")
Call<List<Example>> getBloodGroups();
}

最后打电话改造如下:

Call<List<Example>> call = new RestClient(this).getApiService()
                .getBloodGroups();
        call.enqueue(new Callback<List<Example>>() {
            @Override
            public void onResponse(Call<List<Example>> call, Response<List<Example>> response) {

            }

            @Override
            public void onFailure(Call<List<Example>> call, Throwable throwable) {

            }
        });