Problem mit Javascript Local Storage in Android WebView App

  • Antworten:5
Johann Schumacher
  • Forum-Beiträge: 31

12.03.2013, 19:23:20 via Website

Ich nutze in einem HTML5/Javascript Spiel local storage um erzielte Highscores zu speichern. Das klappt soweit auch ganz gut.
Nun habe ich das Spiel per Web View in eine Android App eingebettet und habe im Java Code auch den Speicher aktiviert durch:

webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);

Wenn ich jetzt das Spiel starte und einen Highscore erziele, wird dieser auch abgespeichert. Beende ich die App und starte erneut, ist der Highscore wieder bei 0 Punkten. Schließe ich jetzt wieder die App und starte neu, dann ist die Highscore wieder da. Das kann ich dann beliebig oft fortführen... Teilweise wird auch eine zweite Highscore abgespeichert, welche sich dann nach oben beschriebenen Schema mit der ursprünglichen Highscore abwechselt.

Hat jemand eine Ahnung, woran das liegen könnte?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.03.2013, 19:30:33 via App

Speicherst du denn den Highscrore irgendwo?
Wenn nicht solltest du dir mal die SharedPreferences an.

LG Pascal //It's not a bug, it's a feature. :) ;)

Johann Schumacher

Antworten
Johann Schumacher
  • Forum-Beiträge: 31

12.03.2013, 19:38:18 via Website

Ich speichere den Highscore nur über den Javascript Dom Storage innerhalb der Web View. Selbst nach einem Neustart sind die Highscores noch da und erst wenn ich die App wieder schließe und wieder öffne, ist die Highscore weg. Wenn ich dann wieder schließe und erneut öffne, ist die Highscore wieder da.

— geändert am 12.03.2013, 19:42:19

Antworten
impjor
  • Forum-Beiträge: 1.793

12.03.2013, 19:45:29 via App

Versuch mal das:
1webSettings.setDatabasePath("/data/data/"+this.getPackageName()+"/databases/");

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Johann Schumacher

Antworten
Johann Schumacher
  • Forum-Beiträge: 31

12.03.2013, 20:06:24 via Website

Danke, das funktioniert wohl schonmal in der App Variante ohne Javascript Interface und ohne Werbung via Admob. In der Variante mit Javascript Interface und Werbung wird teilweise mehrmals hintereinander die richtige Highscore angezeigt (also schließen und neustarten), dann mal eine falsche Highscore und dann eine leere Highscore. Bleibt nur noch zu klären, woran das liegt...

Edit: Kann ich diese Hinweismeldung ignorieren oder sollte ich was verändern? "Do not hardcode "/data/"; use Context.getFilesDir().getPath() instead"

Edit 2: Den genauen Fehler kann ich nicht wirklich lokalisieren. Er tritt zumindest seltener auf als zuvor, dennoch ist es ein unangenehmer Fehler... Werde es wohl mal mit SharedPreferences versuchen. Wie muss ich da vorgehen, wenn ich Werte für jeweils eine Highscore für 3 verschiedene Schwierigskeitsstufen speichern möchte? Ich dachte mir das so, dass ich jeweils eine Funktion für das Lesen der SharedPreferences und eine Funktion für das Schreiben in die SharedPreferences anlege, welche über das Javascript Interface aufgerufen werden und einen Wert als String vom Javascript-Code erhalten.

Edit 3: Habe nun über ein Javascript Interface die Highscore über SharedPreferences gespeichert, was bisher wunderbar funktioniert. Vielen Dank für den Hinweis!

— geändert am 13.03.2013, 00:12:29

Antworten
Andreas Kr
  • Forum-Beiträge: 1

23.02.2014, 10:09:41 via Website

Hallo,

Ich hatte das Problem auch. Wenn ich es richtig sehe, macht admob auch eine webview auf und wer zuerst fertig ist haben kommt die Daten. Mal ist es der Keine Probleme nehrew mal die Werbung...

Ich habe es wie folgt gelöst : zuerst startet mein webview. Wenn meine js Applikation gestartet ist und ihre Daten gelesen haben, wird die Werbung gestartet.... Keine Probleme mehr... (Android 2.2, 4.1)

Viele Grüße,
Andreas

Antworten