如何多次/循环调用GsonRequest

时间:2016-01-07 12:43:41

标签: android json android-volley

在我的应用程序中,我想从多个URL中获取数据并将json response绑定到相应的类,例如Gallery Url响应将与Gallery class绑定。

我可以拨打单URLClass,但我想用不同的网址和班级名称拨打10次电话。我怎样才能做到这一点?

这是我的代码:

String url="http://icetea09.com/blog-files/demo_json";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tvResult = (TextView) findViewById(R.id.tvResult);
    VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);
}

final GsonRequest gsonRequest = new GsonRequest(url, Gallery.class, null, new Response.Listener<Gallery>() {

    @Override
    public void onResponse(Gallery gallery) {
        String textResult = "";

        for (int i = 0; i < gallery.matches.size(); i++) {
            Match Item = gallery.matches.get(i);
            textResult += "URL: " + Item.url + "\n";
        }
        tvResult.setText(textResult);
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError volleyError) {
        if (volleyError != null) {
            Log.e("MainActivity", "" + volleyError.getMessage());
        }
    }
});

请建议我如何在for循环中进行此调用?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是一种方法:

private List<String> urls;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addUrls();
    doRequests();

    tvResult = (TextView) findViewById(R.id.tvResult);
    VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);
}

private void addUrls() {
    urls = new ArrayList<String> ();
    // add your urls here
    urls.add("http://icetea09.com/blog-files/demo_json");
}

private void doRequests() {
    for (String url : urls) {
        GsonRequest gsonRequest = new GsonRequest(url, Gallery.class, null, new Response.Listener<Gallery>() {

        @Override
        public void onResponse(Gallery gallery) {
            String textResult = "";

            for (int i = 0; i < gallery.matches.size(); i++) {
                Match Item = gallery.matches.get(i);
                textResult += "URL: " + Item.url + "\n";
            }
            tvResult.setText(textResult);
        }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                if (volleyError != null) {
                    Log.e("MainActivity", "" + volleyError.getMessage());
                }
            }
        });
    }
}

随意根据需要对其进行优化,因为我对Gson不是很熟悉,并且每次迭代初始化一个新的GsonRequest对象不适合大量网址。

这个代码的想法是将你的GsonRequest封装在for循环中。所有的url都在ArrayList中给出(在 addUrls()方法中添加它们!),并为数组中的每个元素执行一个新的请求。

要使用多个类执行此循环,您应该创建一个超类,并从中继承所有类,并在循环中调用此超类。