能够解析json
(文本+图片)Feed并在RecyclerView
内以网格方式显示它们。如问题中所述,我正在使用Volley
库。
我有Volley Singleton
,LruBitmapCache
,如this tutorial中所述。
除了延迟加载部分外,一切正常,即只有在加载所有文本和图像后才能看到视图。当然,理想的方法是首先加载文本而不等待图像下载,这是我现在无法实现的。
我的onBindViewHolder
的 RecyclerView Adapter
@Override
public void onBindViewHolder(final ViewHolder viewHolder, int position) {
final FeedItemBangCake item = feedItems.get(position);
viewHolder.name.setText(item.getName());
viewHolder.price.setText("Rs." + String.valueOf(item.getPrice()));
viewHolder.prodId.setText(String.valueOf(item.getUniProdId()));
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
// Feed image
if (item.getImge() != null) {
imageLoader.get(item.getImge(), new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {
viewHolder.feedImageView.setImageUrl(imageContainer.getRequestUrl(), imageLoader);
viewHolder.feedImageView.setVisibility(View.VISIBLE);
}
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
} else {
viewHolder.feedImageView.setVisibility(View.GONE);
}
}
getJsonData()
- 负责制作截击请求的片段内的方法
private void getJsonData(String URL_FEED_DATA) {
// first check for cached request
Cache cache = AppController.getInstance().getRequestQueue().getCache();
Cache.Entry entry = cache.get(URL_FEED_DATA);
if (entry != null) {
// fetch the data from cache
try {
String data = new String(entry.data, "UTF-8");
try {
parseJsonFeed(new JSONObject(data));
} catch (JSONException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else {
// making fresh volley request and getting json
JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET,
URL_FEED_DATA, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
VolleyLog.d(TAG, "Response: " + response.toString());
if (response != null) {
parseJsonFeed(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
} catch (Exception e) {
}
}
}
});
// Adding request to volley request queue
AppController.getInstance().addToRequestQueue(jsonReq);
}
parseJsonFeed()
显然是解析json数据的方法。
我到现在为止尝试了什么:
我试图通过将适配器的图像加载部分包裹在run()
内但在没有用的情况下将图像加载到单独的线程中。
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
}
});
在文本加载另一个请求时,对图像进行单独的截击请求是否是一个好主意?
注意:我提到的教程也处理延迟加载。我按照教程的确切程序,在我的情况下仍然懒得加载不工作。