2015-11-23 30 views
0

我有一個應用程序,它從Parse.com獲取數據,並在2個部分中使用,一個在listView中,另一個在網格視圖中使用。Android上的緩存

所以我想緩存這些數據(字符串,位圖),脫機工作,只要設備沒有互聯網,所以它從緩存加載。而且,每當我的應用程序關閉並再次打開時,它應該更新緩存的數據,如果有互聯網。 在更新過程中,如果我的緩存中有相同的數據,它不應該再次創建它,它只能創建新的並更新視圖。

在android中這樣做的最好方法是什麼? 謝謝。

+1

你可以在android中使用'shared preference',因爲它可以將數據保存在你的應用程序緩存中,並保護數據。欲瞭解更多信息請點擊此鏈接 - [http://stackoverflow.com/questions/23024831/android-shared-preferences-example](http://stackoverflow.com/questions/23024831/android-shared-preferences-example) – sud

+0

@ sud。感謝您的評論,我認爲不建議將共享首選項中的位圖保存起來,我錯了嗎? 謝謝。 – Shant11

+0

是的,我想你想保存字符串值... – sud

回答

0

要緩存圖像,您可以使用一些庫:Glide,Picaso ... 要緩存文本,您需要使用HttpClient設置緩存。例如:

private void configureCache() { 
    if (cache == null) 
     cache = createHttpClientCache(context); 

    mHttpClient.setCache(cache); 
    mHttpClient.networkInterceptors().add(REWRITE_CACHE_CONTROL_INTERCEPTOR); 
} 

private static Cache createHttpClientCache(Context context) { 
    File cacheDir = context.getDir("cache_api", Context.MODE_PRIVATE); 
    return new Cache(cacheDir, HTTP_CACHE_SIZE); 
} 
+0

謝謝你的回答,但我想解析一下。com已經在做這項工作了,我只需要將它緩存在本地(我不知道在哪裏),並在應用程序打開時將其恢復,並在每次獲得互聯網時進行更新。 謝謝。 – Shant11

+0

我認爲這項工作是自動的 – phongvan

+0

你是什麼意思「自動」? – Shant11

1

緩存數據來形式的Webservice

用於獲取數據U可以使用排或讓你可以將其設置爲用戶所需屬性的數據緩存都庫給出的數據後改造用於保存數據的緩存選項嘗試使用該庫。

+0

感謝您的評論,我已經通過parse.com api輕鬆獲取數據,我只是不知道在哪裏緩存它的最佳方式。 但是,我會嘗試。 @antosh rawat – Shant11

0

字符串/文字:

  1. 如果你的數據量不是那麼多,你可以使用SharedPreference

  2. 如果你有大量的數據,你應該使用SQlite

For Image:

  1. 畢加索 - >http://square.github.io/picasso/

  2. 通用圖像裝載機 - >https://github.com/nostra13/Android-Universal-Image-Loader

+0

感謝您的評論,所以我應該在我的應用程序中創建一個sqlite表並在每次保存信息?@ Zahidul Islam – Shant11

+0

是的,很容易對您的數據運行CRUD操作。並且您可以管理應用程序的每個版本中的數據。 –

+0

好吧,我會給你一個鏡頭。 – Shant11

0

試試這個代碼,它將幫助 -

File cacheDir = getBaseContext().getCacheDir(); 
File f = new File(cacheDir, "pic"); 

try { 
    FileOutputStream out = new FileOutputStream(
      f); 
    pic.compress(
      Bitmap.CompressFormat.JPEG, 
      100, out); 
    out.flush(); 
    out.close(); 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Intent intent = new Intent(
     AndroidActivity.this, 
     OpenPictureActivity.class); 
startActivity(intent); 

,然後在新的活動 -

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.open_pic_layout); 
    File cacheDir = getBaseContext().getCacheDir(); 
    File f = new File(cacheDir, "pic");  
    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(f); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Bitmap bitmap = BitmapFactory.decodeStream(fis); 

    ImageView viewBitmap = (ImageView) findViewById(R.id.icon2); 
    viewBitmap.setImageBitmap(bitmap); 
+0

謝謝你的回答,所以你建議我把它寫在本地磁盤上,對不對? 。@ sud – Shant11

+0

是的,它不是這個代碼只是緩存它 – sud

+0

好吧,你需要清理這個文件嗎? @sud – Shant11