2014-04-17 96 views
4

我目前正在寫一個小應用程序,通過下載last.fm生成的XML文件顯示在我的本地酒吧當前播放歌曲。的Android - ION緩存導致

我的問題是:與XML同步聯機它沒有得到新版本的時候,而是採用先下載XML一遍又一遍。與此同時,在隨機瀏覽器中打開此鏈接確實會提供正確的結果。可能是緩存或懶惰的下載,我不知道。我也不知道這是否與ION相關。

我目前正在與一些代碼,下載前通過該應用清除整個緩存固定這個,還有這個效果很好,但因爲我可能會想擴展應用程序,我將不得不尋找另一種方式來解決這個問題。

我的代碼:

public class MainActivity extends Activity implements OnClickListener { 

private final static String nonXML = {the url to my xml-file} 

private String resultXml; 

private TextView artistTextView, songTextView, albumTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    artistTextView = (TextView) findViewById(R.id.artistTextView); 
    songTextView = (TextView) findViewById(R.id.songTextView); 
    albumTextView = (TextView) findViewById(R.id.albumTextView); 
    Button mainButton = (Button) findViewById(R.id.mainButton); 

    mainButton.setOnClickListener(this); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    update(); 
} 

@Override 
public void onClick(View v) { 
    update(); 
} 

private void update() { 
    deleteCache(this); 
    getXML(); 

    XMLToClass convertor = new XMLToClass(); 
    NonPlaylist non = convertor.convert(resultXml); 

    artistTextView.setText(non.getArtist()); 
    songTextView.setText(non.getSong()); 
    albumTextView.setText(non.getAlbum()); 
} 

private void getXML() { 
    try { 
     Ion.with(getBaseContext(), nonXML) 
       .asString() 
       .setCallback(new FutureCallback<String>() { 
        @Override 
        public void onCompleted(Exception e, String result) { 
         resultXml = result; 
        } 
       }).get(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 
} 

public static void deleteCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) {} 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
} 

回答

10

離子確實事實上緩存,根據HTTP規範。如果您想忽略緩存,請在構建請求時使用.noCache()方法。

提示:您還可以打開詳細日誌記錄在離子請求,看看什麼是引擎蓋下發生至於緩存等

.setLogging(「MyTag」,Log.VERBOSE)

+0

奇蹟般有效!謝謝! – Daemun

+0

Ion緩存請求需要多長時間?應用程序實例的生命?緩存的大小是否有限制?如何清除緩存? – William

+0

有沒有辦法清除Ion的緩存? – lahsrah

相關問題