2016-07-26 18 views
0

我的問題是,我在遠程服務器手動更改圖像後,如果我重新運行我的應用程序,android仍然顯示舊圖像。在我的真實設備中清除CATCHE和DATA,仍然顯示舊圖像。如果我卸載並再次運行它,那麼它會顯示新圖像,在遠程服務器中是什麼。爲什麼在清除數據和catche之後,仍然顯示舊圖像?Android:更新遠程服務器中的圖像後,imageview仍然顯示舊圖像

public class MainActivity extends AppCompatActivity { 

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

    imageView = (ImageView)findViewById(R.id.imageView); 

    Picasso.with(this) 
      .load("http://gator4227.hostgator.com/~harakas/images/[email protected]") 
      .resize(250,250) 
      .centerCrop() 
      .into(imageView); 
} 

我試過onDestroy(),刪除catche和數據,但仍然是同樣的問題。

@Override 
protected void onDestroy() { 
    deleteCache(this); 
    clearApplicationData(); 
    super.onDestroy(); 
} 

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(); 
} 

public void clearApplicationData() { 

    File cacheDirectory = getCacheDir(); 
    File applicationDirectory = new File(cacheDirectory.getParent()); 
    if (applicationDirectory.exists()) { 

     String[] fileNames = applicationDirectory.list(); 

     for (String fileName : fileNames) { 

      if (!fileName.equals("lib")) { 

       deleteFile(new File(applicationDirectory, fileName)); 

      } 

     } 

    } 

} 

public static boolean deleteFile(File file) { 

    boolean deletedAll = true; 

    if (file != null) { 

     if (file.isDirectory()) { 

      String[] children = file.list(); 

      for (int i = 0; i < children.length; i++) { 

       deletedAll = deleteFile(new File(file, children[i])) && deletedAll; 

      } 

     } else { 

      deletedAll = file.delete(); 

     } 

    } 

    return deletedAll; 

回答

0

畢加索試圖首先從內存緩存中獲取圖像。如果它在緩存中可用,那麼它將顯示它。要覆蓋這個,你可以使用MemoryPolicy。

嘗試

Picasso.with(this) 
     .load("http://gator4227.hostgator.com/~harakas/images/[email protected]") 
     .resize(250,250) 
     .memoryPolicy(MemoryPolicy.NO_CACHE) 
     .centerCrop() 
     .into(imageView); 
+0

謝謝你,問題就迎刃而解了。 – j22purikas

相關問題