0

Les valeurs SharedPreferences ne sont pas affichées si je modifie le fichier sharedPreferences par défaut en interne. Mais si je suis en train de fermer et d'ouvrir une application, alors ça va arriver.Les valeurs SharedPreferences ne proviennent pas si je modifie le fichier SharedPreferences par défaut en interne

En raison de certaines exigences, je stocke le fichier sharedPreferences dans google drive. Après cela, je restaure les mêmes données sharedPreferences dans un autre appareil en utilisant le même compte Google, toutes les données XML se passe bien. Mais dans l'objet sharedPreferences, ces valeurs ne sont pas actualisées. Mais alors que la fermeture et l'ouverture des valeurs d'application se passent bien. Comment rafraîchir les sharedPreferences sans fermer l'application? Ci-dessous est ma méthode pour écrire le fichier sharedPreferences dans le texte par défaut pathstrong du fichier.

private void restore(Context ctx, InputStream myInputs, String path) { 
    OutputStream myOutput; 

    try { 
    myOutput = new FileOutputStream(path); 

    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInputs.read(buffer)) > 0) { 
     myOutput.write(buffer, 0, length); 
    } 

    // Close and clear the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInputs.close(); 
    googleDriveBackUpActivity.setBackUpInfo(); 
    Toast.makeText(ctx, R.string.successfully_restored_from_google_drive, Toast.LENGTH_SHORT).show(); 

    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 
+0

Je suis assez sûr que 'SharedPreferences' met en cache après le premier chargement de sorte qu'il n'a pas besoin de continuer à frapper le disque. Plutôt que d'écrire directement dans le fichier xml, vous devez utiliser 'SharedPreferences.Editor' pour qu'Android sache quand invalider le cache. – Jon

Répondre

0

SharedPreferences valeurs caches de sorte qu'il n'a pas besoin de frapper le disque à chaque fois. La documentation indique clairement que vous ne devez écrire dans le fichier de préférence via le Editor ou vous obtiendrez un comportement inattendu:

Modifications aux préférences doivent passer par un objet SharedPreferences.Editor pour assurer les valeurs de préférence restent dans un état cohérent et contrôle quand ils sont commis au stockage. Les objets renvoyés par les différentes méthodes get doivent être traités comme non modifiables par l'application.

Au lieu d'écraser le fichier par défaut, essayez plutôt de lire le xml de votre fichier et l'écrire de nouveau dans les préférences partagées de l'application via l'Editor pour synchroniser les valeurs.

+0

En outre, un hack qui pourrait valoir la peine d'être essayé (mais je ne peux pas le tester maintenant): appelez 'getSharedPreferences(). Edit(). Clear(). Apply()' avant d'écraser le fichier. Cela devrait détruire vos préférences existantes, qui je soupçonne peut-être également invalider les valeurs mises en cache. – Jon