StrictModeDiskReadViolation wenn

Ich versuche, SharedPreferences zu verwenden, um einige Benutzereinstellungen für meine App zu speichern. Ich habe diesen Code in meiner Activity.onCreate-Methode:

sharedPreferences = context.getSharedPreferences("MMPreferences", 0); soundOn = sharedPreferences.getBoolean("soundOn", true); 

Aber es gibt mir diesen Fehler (es ist der getBoolean, der den Fehler erzeugt):

  • Android Auto komplett nur nach dem Platz?
  • Was ist Repo und warum benutzt Google es?
  • Zugriff auf Benutzer E-Mail mit neuen Facebook Android SDK
  • Ist mit Fragments SetRetainInstance (true) wirklich eine gute Praxis, um Rotationsänderung zu bewältigen
  • So lesen Sie Daten vom Bluetooth-Barcode-Scanner Symbol CS3070 auf Android Device
  • H2 Datenbank vs SQLite auf Android
  •  11-10 16:32:24.652: D/StrictMode(706): StrictMode policy violation; ~duration=229 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=2079 violation=2 

    Und das Ergebnis ist, dass der Wert nicht gelesen wird und ich bekomme auch den gleichen Fehler, wenn ich versuche, die SharedPreferences mit diesem Code zu schreiben (es ist die Commit, die den Fehler erzeugt):

     SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("soundOn", soundOn); editor.commit(); 

    Die einzige Antwort für diesen Fehler, den ich finden kann, ist über eine strenge Moduswarnung, aber mein Code schlägt wirklich nicht die Schreibweise der SharedPreferences Schlüssel / Wertdaten ein.

  • Ausnahmeregelung "IllegalStateException: Kann diese Aktion nach onSaveInstanceState nicht ausführen"
  • Kann nicht den Wert der schreibgeschützten Eigenschaft 'jniFolders' auf Task 'setzen: android: packageDebug'
  • Wie kann ich Stimme und Aufzeichnung aufrufen?
  • MediaPlayer arbeitet seit r10 nicht mehr am Emulator?
  • AccessToken-Token: ACCESS_TOKEN_REMOVED in Facebook Android SDK
  • GCM Key für Browser-Apps (mit Referenten) Status inaktiv
  • 2 Solutions collect form web for “StrictModeDiskReadViolation wenn”

    Sie müssen fileSystem-Operationen auf einem separaten Thread machen, dann wird der Fehler weggehen.

    Du kannst auch den StrictMode ausschalten (aber ich empfehle das nicht)

     StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy(); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old) .permitDiskWrites() .build()); doCorrectStuffThatWritesToDisk(); StrictMode.setThreadPolicy(old); 

    Wenn Sie reaktive (RxJava) in Ihrem Android-Projekt konfiguriert haben, können Sie die Vorteile seiner Eigenschaften wie planen eine Aufgabe auf einem I / O-spezifischen Scheduler, zum Beispiel:

     public void saveFavorites(List<String> favorites) { Schedulers.io().createWorker().schedule(() -> { SharedPreferences.Editor editor = mSharedPreferences.edit(); Gson gson = new Gson(); String jsonFavorites = gson.toJson(favorites); editor.putString(Constants.FAVORITE, jsonFavorites); editor.apply(); }); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.