如何填充GridView如果互联网无法使用,但已将图像缓存到SD卡
-
21-12-2019 - |
题
你好,我正在编写一个应用程序,我正在解析JSON图像,然后将其缓存到SD卡中。
我想做什么?
我想将图像从JSON加载到GridView(通过将图像缓存到SD卡中),并想要填充GridView(无论是无论是可用的互联网可用),一旦图像已经下载到SD卡中。
我得到的是什么?
我能够将图像缓存到SD卡中,也可以填充GridView,但无法将图像显示为GridView(如果不可用),但图像缓存到SD卡中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
gridView = (GridView) findViewById(R.id.grid_view);
utils = new Util(this);
// Initilizing Grid View
InitilizeGridLayout();
// Gridview adapter
new getImages().execute();
}
private void InitilizeGridLayout() {
Resources r = getResources();
float padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
AppConstant.GRID_PADDING, r.getDisplayMetrics());
columnWidth = (int) ((utils.getScreenWidth() - ((AppConstant.NUM_OF_COLUMNS + 1) * padding)) / AppConstant.NUM_OF_COLUMNS);
gridView.setNumColumns(AppConstant.NUM_OF_COLUMNS);
gridView.setColumnWidth(columnWidth);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setPadding((int) padding, (int) padding, (int) padding,
(int) padding);
gridView.setHorizontalSpacing((int) padding);
gridView.setVerticalSpacing((int) padding);
}
class getImages extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
JSONObject json = JSONfunctions.getJSONfromURL(location);
try {
JSONArray jarray;
jarray = json.getJSONArray(TAG_ITEMS);
for (int i = 0; i < jarray.length(); i++) {
JSONObject gridImages = jarray.getJSONObject(i);
imagePaths.add(gridImages.getString("saved_location"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths,
columnWidth);
// setting grid view adapter
gridView.setAdapter(adapter);
}
}
}
. 解决方案
以下是通过JSON Online的从服务器查看图像的完整解决方案也是脱机。
希望它将解决您的问题。
感谢
其他提示
它更好地使用lazyloading ..这将缓存图像并显示图像即使没有互联网也没有可用的互联网
您可以使用 thest1 / lazylist
或提前图像缓存Android-Universal-Image-Loader 从这里开始
Android-Universal-Image-Loader包含不同的示例,包括LazyLoding在网格视图中。
希望这将帮助您
我认为这可以帮助你。在检查Internet连接之前,请刚刚块(如果检查)
if(SDcard is emty)
{
if(netAvailable)
{go as usual}
}else{nothing}
}
else{
take images from sd card and display it.}
.
这可能会给你一些提示来解决这个问题...... 如果要刷新SD卡数据,则在击中Web服务之前清除SDCard。
不隶属于 StackOverflow