2014-07-29 2 views
0

내 응용 프로그램은 사용자 유형 (DeviceID에 의해 결정됨)을 기반으로 ListFragments를 생성 한 다음 웹 서버에서 이미지를 가져옵니다. 그러면이 이미지가 목록으로 표시됩니다.캐싱 ListFragment 데이터

제 질문은 어떻게 오프라인 모드로 표시되도록 조각과 (동적으로 생성 된) 이미지도 캐시 할 수 있습니다. 예를 들어 사용자가 활성 인터넷 연결없이 응용 프로그램을 열면 마지막으로 동적으로 생성 된 조각 내 이미지가 표시됩니다.

지금 내 앱은 매번 웹 서비스에서 이미지를 다운로드합니다.

응용 프로그램이로드 될 때마다 MainActivity에서 조각을 동적으로 생성하기위한 코드입니다.

//generating the views based on JSON data 
    try { 
     JSONObject resultObject = new JSONObject(result.toString()); 
     boolean success = resultObject.getBoolean("success"); 
     JSONArray jArray = resultObject.getJSONArray("data"); 

     if (success == true) { 
      //save menu 

      for (int i = 0; i < jArray.length(); i++) { 
       postObject = jArray.getJSONObject(i); 

       if (postObject.has("ev_count")) { 
        categoriesSet.put("Events", "Events"); 
        mTabsAdapter.addTab(bar.newTab().setText("Events"), EventsFragment.class, null); 
       } 

       if (postObject.has("pl_count")) { 
        categoriesSet.put("Places", "Places"); 
        mTabsAdapter.addTab(bar.newTab().setText("Places"), PlacesFragment.class, null); 
       } 

       if (postObject.has("gn_count")) { 
        categoriesSet.put("General", "General"); 
        mTabsAdapter.addTab(bar.newTab().setText("General"), GeneralFragment.class, null); 
       } 
      } 
     } 

     //saving values to the shared preferences (hashmap as a string) 
     categoriesPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor editor = categoriesPreferences.edit(); 
     editor.putString("categories", categoriesSet.toString()); 
     editor.commit(); 

    }catch (JSONException e) { 
     Log.e("ALLOCATE_DAT_ERROR", e.toString()); 
    } 
+0

몇 가지 코드를 제공해 주시겠습니까? 새 Fragment 클래스를 생성 중이거나 일부 Fragment 인스턴스 만 새로 작성하고 있습니까? – simekadam

+0

@ simekadam 조각을 생성하는 코드를 제공했습니다. 기본적으로 조각의 새 인스턴스를 생성합니다. – Yrol

답변

0

난 그냥 조언도 자주 캐싱을 처리하는 몇 가지 이미지 다운로드 라이브러리를 사용하는 것입니다 .. 여기

그들 중 일부의 짧은 목록입니다

Volley는 -에서 직접 google은 전체 네트워크 스택과 비슷하지만 쉽게 이미지 (NetworkImageView 참조)를 캐싱 할 수 있습니다 (캐시 구현을 제공해야합니다 - Google이 도움이 될 것입니다).

Picasso - 매우 간단 API와 광장에서 멋진 도서관 - 내가 함께 갈 당신을 조언 것, 그것은

Universal Image Loader 갈 수있는 가장 쉬운 방법이 될 수있다 - 다른 옵션을, 정말 많은 옵션을 가지고 있으며, 또한 쉽게 사용하기

다음은 이미지를로드하고 캐시하는 데 volley를 사용하는 방법을 알려주는 간단한 샘플 코드입니다. 당신은 다음 ImageLoader 인스턴스를 필요

NetworkImageView mage = (NetworkImageView) view.findViewById(...); 
image.setImageUrl("http://someurl.com/image.png",mImageLoader); 

..

public ImageLoader getImageLoader() { 
    if (mImageLoader == null) { 
     mImageLoader = new ImageLoader(getImageRequestQueue(), new DiskBitmapCache(getCacheDir(), 50 * 1024 * 1024)); 
    } 
    return mImageLoader; 
} 

imageRequestQueue 이미 DiskCache 당신으로 물건

네트워킹 발리를 사용하는 경우 이미 앱에 어딘가에 초기화해야 표준 큐입니다 사용할 수 있습니다 this

+0

@ simekadam 감사합니다. LruCache와 함께 이미 발리를 사용하고 있습니다. 두 라이브러리를 사용하여 오프라인 캐시/디스크 캐시를 구현하는 방법에 대한 제안이 있습니까? 나는 호출 할 함수 및 함수 등을 의미한다. 더 좋은 예를 찾을 수 없었습니다 – Yrol

+0

디스크 캐시를 사용하고 있습니까, 아니면 메모리 캐시 만 사용하고 있습니까? – simekadam

+0

메모리 캐시는 웹 서비스에서 이미지를 가져올 때도 오프라인 모드로 표시되기를 원합니다. 그래서 디스크 캐시를 올바르게 사용해야합니까? – Yrol