【问题标题】:Android volley response data not loading to viewAndroid volley 响应数据未加载以查看
【发布时间】:2016-11-21 19:35:23
【问题描述】:

我在这里遇到了一个奇怪的问题,我使用 volley 获得了 GET 响应并将数据加载到回收器视图;但是,除非我在应用程序运行时锁定和解锁手机一次,否则数据不会反映在视图中。然后我尝试将相同的响应本地存储到资产文件夹中,它的工作非常好。我对此没有任何线索,GET 响应显示在记录器中;我也对 Listview 进行了同样的尝试,但结果始终相同。请帮我解决这个问题......

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

    newsFeed = engine();

    rv = (RecyclerView) findViewById(R.id.newsItems);
    rv.setHasFixedSize(true);
    llm = new LinearLayoutManager(this);
    rv.setLayoutManager(llm);

    initializeAdapter(newsFeed);



}


private void initializeAdapter(ArrayList<newsItem> newsFeed) {
    context = getApplicationContext();
    NewsViewAdapter adapter = new NewsViewAdapter(context, newsFeed);
    rv.setAdapter(adapter);
}


private ArrayList<newsItem> engine() {
    //String res=loadJSONFromAsset();
    RequestQueue queue = Volley.newRequestQueue(this);
    final ArrayList<newsItem> reqs = new ArrayList<>();
    JsonObjectRequest myReq = new JsonObjectRequest(Request.Method.GET,
            "http://content.guardianapis.com/search?page=20&q=business%20OR%20sport&show-fields=thumbnail&api-key={mykey}",
            null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        //  longInfo(response.toString());
                        JSONObject newsItems = response.getJSONObject("response");
                        JSONArray webNews = newsItems.getJSONArray("results");
                        int a = webNews.length();

                        for (int i = 0; i < a; i++) {
                            JSONObject temp = webNews.getJSONObject(i);
                            String title = temp.getString("webTitle");
                            Log.d("mytitile", title);
                            // String time = temp.getString("time");
                            String date = temp.getString("webPublicationDate");
                            String content = temp.getString("id");
                            Log.d("myContent", content);
                            String link = temp.getString("webUrl");
                            JSONObject temp_img = temp.getJSONObject("fields");
                            String image = temp_img.getString("thumbnail");
                            Log.d("imageUrl", image);
                            reqs.add(new newsItem(title, content, date, link, image));

                        }
                    } catch (JSONException e) {
                        Log.i("myTag", e.toString());
                    }
                }

            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i("myTag", error.toString());
                }
            });


    myReq.setRetryPolicy(new DefaultRetryPolicy(
            10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
    ));
    queue.add(myReq);

【问题讨论】:

    标签: android android-volley android-recyclerview


    【解决方案1】:

    使用这个:

    在你的领域:

    private ArrayList<newsItem> items = new ArrayList<>();
    private NewsViewAdapter adapter;
    

    在您的初始化适配器中:

     adapter = new NewsViewAdapter(context, items);
    

    在你的 onResponse 中,而不是 reqs.add

     items.add(new newsItem(parameters..));
    

    在 onResponse 中的 for 循环之后,您调用

     adapter.notifyDataSetChanged();
    

    你很高兴

    【讨论】:

    • 那为什么我的数据在本地存储时会被加载!!!我在凌空后面跑,想与此有关!
    • 可能是因为你在本地加载时在设置适配器之前先加载了它?
    【解决方案2】:

    您的适配器不知道数据集已更改,直到您通过打开和关闭屏幕强制它再次检查。 (我假设如果您旋转手机,数据也会更新。)

    一种解决方案是通过调用notifyDataSetChanged() 手动通知您的适配器数据已更改

    首先将NewsViewAdapter adapter 设为全局变量,然后:

    adapter.notifyDataSetChanged();
    

    在你 for 循环后进入 onResponse()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多