0

您好,我正在编写一个应用程序,我在其中解析 JSON 图像,然后缓存到 SD 卡中。

我想做的事 ?

我想将图像从 JSON 加载到 GridView 中(通过将图像缓存到 SD 卡中),并且一旦图像已经下载到 SD 卡中,我想填充 GridView(无论 Internet 是否可用)。

我得到了什么?

我能够将图像缓存到 SD 卡中,也可以填充 GridView,但无法将图像显示到 GridView(如果 Internet 不可用),但图像缓存到 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);
        }
    }
}
4

3 回答 3

2

这是通过 JSON 在线和离线查看服务器图像的完整解决方案。

  1. 数据库适配器

  2. GridViewActivity

  3. 全屏查看活动

希望它能解决你的问题。

谢谢

于 2014-06-09T06:07:32.593 回答
2

最好使用延迟加载。即使没有可用的 INTERNET,这也会缓存图像并显示图像

您可以使用thest1/LazyList

或 Advance image caching Android-Universal-Image-Loader From here

Android-Universal-Image-Loader 包含不同的示例,包括网格视图中的 Lazyloding。

希望对你有帮助

于 2014-06-03T09:19:45.073 回答
0

我想这可能会对你有所帮助。在检查互联网连接之前再放一个 if 块

 if(SDcard is emty)
 {
   if(netAvailable)
     {go as usual}
    }else{nothing}
 }
 else{
     take images from sd card and display it.}

这可能会给你一些解决问题的提示......如果你想刷新你的 sd 卡数据,那么在点击 web 服务之前清除 sdcard。

于 2014-06-03T09:21:20.293 回答