首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从web api获取JSON数组

如何从web api获取JSON数组
EN

Stack Overflow用户
提问于 2016-08-04 19:18:40
回答 2查看 2.5K关注 0票数 0

我有一个web api,它为我提供了一组合作伙伴,它看起来像这样:

代码语言:javascript
运行
复制
[ 
  "partner1",
  "partner2",
  "partner3",
  "....",
  "parner222"
]

我有表合作伙伴(ActiveAndroid),其中我想保存所有的合作伙伴从api。

代码语言:javascript
运行
复制
@Table(name = "Partners")
public class Partners extends Model {

    @Column(name = "Name")
    String name;

    public Partners() {}

    public Partners(String name) {
        this.name = name;
    }
}

下面是我的Pojo模型类:

代码语言:javascript
运行
复制
public class Partners {

    @SerializedName("name")
    @Expose
    private List<String> name = new ArrayList<String>();

    public List<String> getName() {
        return name;
    }

    public void setName(List<String> name) {
        this.name = name;
    }

}

这是我的界面

代码语言:javascript
运行
复制
public interface APIService {

        @GET("Partners")
        Call<Partners> getPartners();
}

这是我的APIHelper和api url。

代码语言:javascript
运行
复制
public class APIHelper {

    public static APIService apiService;

    public static APIService getApiService() {
        if (apiService == null) {
            Retrofit retrofit = new Retrofit.Builder().baseUrl("https://part-oflink.domain.com/partners.json/")
                    .addConverterFactory(GsonConverterFactory.create()).build();
            apiService = retrofit.create(APIService.class);
        }
        return apiService;
    }
}

这是一个片段,其中我有一个按钮,我想在上面实现onClick方法来从API中获取数据并将其保存到Partner表中。

代码语言:javascript
运行
复制
public class DownloadMain extends Fragment implements Callback<Partners> {

    private Button dloadPartners;
    private Call<Partners> callPartners;
    public static APIService apiService;

    public DownloadMain() {}

    public DownloadMain newInstance() { return new DownloadMain(); }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.download_main, container, false);

        dloadPartners = (Button) view.findViewById(R.id.downloadPartners);
        dloadPartners.setOnClickListener(btnListener);

        callPartners = APIHelper.getApiService().getPartners();
        callPartners.enqueue(this);

        return view;
    }

    Button.OnClickListener btnListener = (new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //here I need to implement that on click downloads me data
            // and save it into my Partners table
        }
    });

    @Override
    public void onResponse(Call<Partners> call, Response<Partners> response) {

        //here I'm trying to put api response into array list
        if (response.body() != null) {
            ArrayList<String> partnersList = new ArrayList<>();
            partnersList = response.body();

        }
    }

    @Override
    public void onFailure(Call<Partners> call, Throwable t) {

    }
}

现在我被卡住了。我想实现API方法来从onClick获取数据。在onResponse()方法中,我尝试将数据放入ArrayList中,以检查是否收到了数据。我还想将此数据保存到我的表合作伙伴中。

如果有人能帮助我或指导我解决这个问题,我将不胜感激。这是我第一次使用retrofit和api。

是否有人可以帮助或指导我成功从API获取数据并将其保存到表Partners中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-04 19:57:59

您尝试解析JSON字符串(合作伙伴数组)的方式不合适。您的JSON应该如下所示:

代码语言:javascript
运行
复制
{
"partners": 
  ["partner1", "partner2", "partner3", ...]
}

POJO模型类应该是:

代码语言:javascript
运行
复制
class Partners{
    private List<String> partners;

    public Partners(){}

    public void setList(List<String> partners) {
        this.partners = partners;
    }

    public List<String> getList() {
       return this.partners;
    }

    //setter and getter methods
}
票数 1
EN

Stack Overflow用户

发布于 2016-08-04 19:38:09

如果响应不为空,则用于打印值:

代码语言:javascript
运行
复制
for(Partner partner: response){

Log.d("Partner Name",partner.name);

}

如果对数据库使用任何ORM,则调用其DAO并将值传递到数据库中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38765924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档