【问题标题】:How can i used Volley and Loader in a single android project?如何在单个 android 项目中使用 Volley 和 Loader?
【发布时间】:2016-09-18 10:32:04
【问题描述】:

在我的项目中,我首先使用 AsyncTask 从互联网加载 listView 中的数据。之后,我使用 Loader 通过 AsyncTaskLoader 从 Internet 加载数据。但现在我发现凌空是从互联网获取数据的更好方法。所以我的问题是如何使用 Volley 在加载器中加载数据?目前我在加载器的帮助下在 listView 上显示数据,但是如果我不使用加载器来加载数据,那么使用 Volley 在 listView 中加载数据的替代方法是什么?

项目网址:https://github.com/CSS08/InfiniteNews

【问题讨论】:

  • 请在显示数据的地方包含加载程序的代码 - 然后我们可以建议您在使用 Volley 时需要如何更改。
  • 嘿 @ishmaelMakitla 我添加了我的项目 URL 现在我想使用 volly 来获取数据,我该怎么做?

标签: android listview android-studio android-volley loader


【解决方案1】:

您可以为此目的使用 Volley StringRequest - 然后使用您在 QueryResolver 类中已有的代码解析响应 JSON。请参阅下面的代码示例 - 这应该让您了解如何将 Volley 用于您的目的 - 您可以决定将代码放在哪里 - 我只是给您一些关于如何使用 Volley 库的提示。

try{
        RequestQueue queue = Volley.newRequestQueue(context);           
        StringRequest newsDataRequest = new StringRequest(Request.Method.GET,url, new Listener<String>() {
            @Override
            public void onResponse(String newsDataJson) {                   
                Log.i(TAG, "Got News Articles From Server:: "+newsDataJson);
                //Now process the volley response using your QueryResolver code:
                List <NewsData> newsData = QueryResolver.extractFromJson(newsDataJson);
                //with the newsData - you can now update your adapter - I am using an example here
                 newsDataAdapter.clear();
                // If there is a valid list of {@link NewsData}s, then add them to the adapter's
                // data set. This will trigger the ListView to update.
                if (newsData != null && !newsData.isEmpty()) {
                    newsDataAdapter.addAll(newsData);
                }
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //there was an error - you want to print it out here...
            }
        });
        //add the request to queue
        queue.add(newsDataRequest);
    }
    catch(Exception e){
        //some issues here - 
    }

我希望这对你有帮助。你可以在这里查看basic Volley tutorial

【讨论】:

    【解决方案2】:

    代替使用AsyncTask 在后台下载的AsyncTaskLoader,您可以编写一个扩展Loader&lt;NewsData&gt; 的类,并在它的onForceLoad() 方法中排队排球请求,这将执行实际加载。然后在 Volley 的 onResponse 回调中将结果传递给 Loader 的 deliverResult 方法。这样,您将保留 Loader 的所有优点并提高网络性能。

    【讨论】:

    • 谢谢你我明白了。您能否解释一下“然后在 Volley 的 onResponse 回调中将结果传递给 Loader 的 DeliverResult 方法。”这一行有编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多