2016-04-13 10 views
1

Ich bin ein neues Android-Entwicklung und ich versuche zu lernen, Daten im internen Speicher gespeichert und abrufen. Dazu habe ich ein Liniendiagramm eingefügt, in dem x- und y-Koordinaten aufgetragen sind. Ich habe die Koordinatenwerte manuell eingegeben, zu Testzwecken, sobald die Werte geplottet werden. Ich möchte diese Werte in einer Datei speichern. Später, wenn ich die App wieder öffnen, wenn es alte Werte gibt, sollten diese Werte zuerst geplottet werden und später sollten die manuell eingegebenen Werte geplottet werden.Speichern Float-Werte im internen Speicher Android

Ich habe das gleiche mit dem folgenden Code implementiert:

public static void generateValues(ArrayList<Float> theList) { 
    for (int j = 0; j < theList.size(); j++) { 
     if (dummyValues.size() == 0) { 
      dummyValues.add(j, theList.get(j)); 
      } else if (dummyValues.size() == theList.size()) { 
       dummyValues.set(j, theList.get(j)); 
      } else { 
        dummyValues.add(theList.get(j)); 
        } 
      } 
       arraySize=dummyValues.size(); 
      return; 
    } 

Ich speichere die x- und y-Werte in einer Arraylist, bevor die Werte Plotten. Später plotten ich die Werte wie folgt:

public void generateData() { 
    List<Line> lines = new ArrayList<Line>(); 
    List<PointValue> values = new ArrayList<PointValue>(); 
    dummyValues.size(); 
    for (int i = 0; i < dummyValues.size(); i++) { 
     values.add(new PointValue(i, dummyValues.get(i)));   
     Line line = new Line(values); 
     lines.add(line); 
     } 
    data = new LineChartData(lines);  
    if (hasAxes) { 
     Axis axisX = new Axis().setHasLines(true); 
     axisX.setEnabled(true); 
     axisX.setDrawGridLines(true); 
     Axis axisY = new Axis().setHasLines(true); 
     axisY.setDrawGridLines(true); 
     if (hasAxesNames) { 
      axisX.setName("Days"); 
      axisY.setName("Temeperature(Celsius)"); 
      } 
     data.setAxisXBottom(axisX); 
     data.setAxisYLeft(axisY); 
     } else { 
       data.setAxisXBottom(null); 
       data.setAxisYLeft(null); 
       } 
     data.setBaseValue(Float.NEGATIVE_INFINITY); 
     chart.setLineChartData(data); 
} 

Als nächstes ich speichern möchten die aufgetragenen Werte in den internen Speicher. Sobald die Anwendung geöffnet wird, müssen die alten gespeicherten Werte zuerst geplottet und dann die neuen Werte geplottet werden. Ich möchte also wissen, welche Methode am besten zum Speichern und Abrufen von Daten vom Telefon geeignet ist.

Jede Art von Hilfe wird geschätzt.

+0

Speichern X, Y-Werte in Datei mit Daten-Zeit und während App öffnen Dateien und float-basierte Daten Reihenfolge zu vergleichen :) –

Antwort

1

Sie können JSON Format Ihrer Werte in SharedPreferences speichern und dann abrufen, aber zuerst müssen Sie Bibliothek zu Ihrem Projekt hinzufügen. Sie müssen Ihre build.gradle Datei gehen und die folgende Zeile in dependencies Abschnitt hinzufügen:

compile 'com.google.code.gson:gson:2.3' 

Jetzt Gson verwenden Ihr Array in JSON-Format zu konvertieren (Angenommen, Sie ein Array myarraylist genannt haben):

String json = new Gson().toJson(myarraylist); 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
prefs.edit().putString("old_data",json).commit(); 

Wann immer Sie Ihre alten Daten abrufen möchten, können Sie es einfach in umgekehrter Reihenfolge wie:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
String json = prefs.getString("old_data",""); 
TypeToken<ArrayList<Float>> token = new TypeToken<ArrayList<Float>>() {}; 
ArrayList<Float> oldValues = new Gson().fromJson(json,token.getType()); 

An dieser Stelle oldValues enthält Ihre alte ArrayList

+0

Die von Ihnen bereitgestellten Informationen wirklich hilfreich. Aber ich möchte wissen, dass diese alten Werte nach dem Schließen der App gelöscht werden. – ADI

+0

@ADI Nein, alles in SharedPreferences bleibt nach dem Schließen der App – Pooya

+0

Ich weiß, es ist sehr triviale Frage, aber wenn ich "compile" com.google.code.gson: gson: 2.3 'in "build.gardle" schließe ich bekomme den folgenden Fehler : Fehler: (8, 0) Gradle DSL-Methode nicht gefunden: 'compile()' Mögliche Ursachen: Das Projekt 'hellocharts-android-master' verwendet möglicherweise eine Version von Gradle, die die Methode nicht enthält Die Build-Datei Möglicherweise fehlt ein Gradle-Plugin Ich weiß nicht, was schief gelaufen ist – ADI

0

In Ihrem Fall könnten Sie SharedPreferences verwenden. Es ist Schlüssel-Wert-Paarspeicher. und Sie können Float-Wert in SharedPreference nicht verwenden, so verwenden Double oder String-Typ zum Speichern von Werten

+0

Es ist ein Array von Werten kein einziger Wert – Pooya

+0

Sie können die Methode PutStringSet() verwenden, um Array –

+0

zu speichern Ja, aber zuerst wird es hinzugefügt in API 11 und zweitens müssen Sie Ihren Datentyp t konvertieren o HashSet oder etwas ähnliches – Pooya

Verwandte Themen