인터넷을 사용할 수 없지만 이미 SD 카드에 캐시 된 이미지가있는 경우 GridView를 채우는 방법

StackOverflow https://stackoverflow.com//questions/24011147

문제

안녕하세요, JSON 이미지를 구문 분석하고 SD 카드로 캐싱하는 응용 프로그램을 작성하고 있습니다.

내가하고 싶은 일은 무엇입니까?

이미지를 GridView에서 SD 카드에 캐싱하고 이미지를 SD 카드에 이미 다운로드 한 이미지가 이미 다운로드되면 GridView (인터넷 사용 가능)를 채우고 싶습니다.

내가 얻고있는 것은 무엇입니까?

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 온라인으로 서버에서 이미지를 볼 수있는 완벽한 솔루션도 있습니다.

  1. DBAdapter

  2. gridviewactivity

  3. FullScreenViewActivity

  4. 당신의 문제를 해결할 수 있기를 바랍니다.

    감사합니다

다른 팁

더 나은 Lazyloading을 사용합니다. 이렇게하면 이미지가 캐시되고 이미지를 표시 할 수 있습니다

thest1 / lazylist를 사용할 수 있습니다.

또는 Android-Universal-Image-loader 캐싱 여기에서

Android-Universal-Image-Loader는 그리드 뷰에서 lazyloding을 포함한 다른 예제를 포함합니다.

이것이 당신을 도울 것입니다

이것이 당신을 도울 수 있다고 생각합니다.인터넷 연결을 확인하기 전에 블록을 넣으면

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

문제를 해결하기 위해 몇 가지 힌트를 줄 수 있습니다 ...... SD 카드 데이터를 새로 고치고 웹 서비스를 치르기 전에 SDCard를 지우기를 원한다면

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top