Android – ION caches resultado

Actualmente estoy escribiendo una pequeña aplicación que muestra la canción actual que se reproduce en mi pub local al descargar el archivo XML de last.fm.

El problema que tengo es el siguiente: al sincronizar con el xml en línea que no recibe la nueva versión, sino que utiliza el primer xml descargado una y otra vez. Mientras tanto, abrir este enlace en un navegador aleatorio da los resultados correctos. Podría ser caché o descargar perezoso, no lo sé. Tampoco sé si esto está relacionado con ION o no.

Actualmente he arreglado esto con algún código que borra toda la caché de esta aplicación antes de descargar, y esto funciona bastante bien, pero ya que probablemente querrá ampliar la aplicación tendré que encontrar otra manera de resolver este problema.

Mi código:

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

Ion hace de hecho caché, de acuerdo con la especificación http. Si desea ignorar cachés, utilice el método .noCache () al crear su solicitud.

Sugerencia: También puede activar el registro detallado en una solicitud de iones para ver lo que está sucediendo bajo el capó con respecto a la memoria caché, etc.

.setLogging ("MyTag", Log.VERBOSE)

  • Hormiga reconstruyendo proyectos de biblioteca cada vez
  • Cargando el caché cuando está sin conexión en la vista Web de Android
  • Cómo almacenar en caché los mapas de bits en la memoria nativa
  • Bitmap Cache (SoftReference, Hard) en Lazy List no parece funcionar correctamente - Android
  • Almacenamiento en caché de datos para aplicaciones móviles de iOS / Android para trabajar con Pagination
  • Android: Archivo XML de caché de RSS Feed
  • Entendimiento de MvxCachingFragmentCompatActivity
  • Cómo minimizar el tamaño de la caché de la aplicación de Android
  • ¿Cómo implementar el almacenamiento en caché en la aplicación android para los resultados de REST API?
  • Desactivar el almacenamiento en caché en Android para WebApps
  • Cómo borrar caché de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.