2016-04-03 13 views
2

Ich habe Button, wenn ich Speicher ObjectArray in sharedPreference geklickt habe, jetzt möchte ich eine andere Schaltfläche entfernen ObjectArray.Entfernen Sie JSONObject von Sharedreference

wie man einen Eintrag entfernt? Ich schaffe es kann das ganze Datum von sharedPreference zu löschen, aber es ist nicht, was ich will ...

Hier ist mein Code zu speichern:

private void logDateTime() { 

    TextView name = (TextView) findViewById(R.id.tv_tel); 
    String m1 = name.getText().toString(); 
    mTvName = (TextView) findViewById(R.id.tv_name); 
    Intent i = new Intent(CountryActivity1.this, LogActivity.class); 
    String m2 = mTvName.getText().toString(); 
    startActivity(i); 

    // Variables 
    String date = DateFormat.getDateInstance().format(new Date()); 
    String time = DateFormat.getTimeInstance().format(new Date()); 
    String desc = m2; 
    String desc1 = m1; 
    JSONArray completeArray = new JSONArray(); 

    try { 
     // Open the JSON file and initialize a string builder 
     FileInputStream in = openFileInput(FILENAME); 
     InputStreamReader inputStreamReader = new InputStreamReader(in); 
     BufferedReader bufferedReader = new BufferedReader(
       inputStreamReader); 
     StringBuilder sb = new StringBuilder(); 
     String line; 
     // Read the existing content in the JSON file and add it to the 
     // string builder 
     while ((line = bufferedReader.readLine()) != null) { 
      sb.append(line); 
     } 

     if (sb.toString() != "") { 
      JSONArray temp_arr = new JSONArray(sb.toString()); 
      completeArray = temp_arr; 
     } 

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

    catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    // Initialize the JSON object for the new entry 
    JSONObject entry = new JSONObject(); 
    // Initialize the JSON object that will contain the entry object 
    JSONObject finalEntry = new JSONObject(); 

    try { 
     // Add the time and date to the entry object 
     entry.put("date", date); 
     entry.put("time", time); 
     entry.put("description", desc); 
     entry.put("description1", desc1); 
     // Add the entry object to a new object called "entry" 
     finalEntry.put("entry", entry); 

     completeArray.put(finalEntry); 

     // Convert the complete array in to a string 
     String jsonEntry = completeArray.toString(); 

     // Write complete array to the file 
     FileOutputStream fos = openFileOutput(FILENAME, 
       Context.MODE_PRIVATE); 
     fos.write(jsonEntry.getBytes()); 
     fos.close(); 
     // Notify that an entry has been created 
     Toast toast = Toast.makeText(getApplicationContext(), "Saved", 
       Toast.LENGTH_LONG); 
     toast.show(); 
    } 

    catch (JSONException e) { 
     e.printStackTrace(); 
    } 

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

} 

Dank im Voraus

+0

Was ist Ihr Problem? Haben Sie einen Fehler gemacht? –

+0

Ich möchte einen Eintrag aus sharedPreference entfernen ... – Riz

+0

Ich kann nicht finden, die SharedPreferences in Ihrem Code verwenden – Pooya

Antwort

0

Ich habe nichts über gemeinsame Präferenz in Ihrem Code gesehen. Sie haben Ihre JSON-String in einer Datei gespeichert .. obwohl Sie das JSON-String zu einem gemeinsamen Vorlieben wie auf diese Weise

ersten Versuch ein sharedpreference Objekt zu erhalten setzen können

SharedPreferences mySharedPreferences=getSharedPreferences("myStore", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
editor.putString("jString1", yourJsonString1); 
editor.putString("jString2",yourJsonString2); 
editor.commit(); 

Jetzt ist es Zeit, etwas aus dem gemeinsamen zum Entfernen Präferenz. versuchen sharedpreference Objektnamen 'myStore' zu erhalten, die Sie erstellen, haben

früher
SharedPreferences mySharedPreferences=getSharedPreferences("myStore", Context.MODE_PRIVATE); 
if(sharedPreferences != null) { 
    SharedPreferences.Editor editor = mySharedPreferences.edit(); 
    editor.remove("jString1"); 
    editor.commit(); 
} 

über das normale Verfahren ist .. aber ich etwas heikel im Code gefunden. Ihre jsonEntry ist ein jsonString und es enthält JsonArray (completeArray) und dieses Array enthält eine andere JSONObject ‚finalEntry‘ und schließlich das ‚finalEntry‘ hat eine ‚entryjsonObject. Vielleicht möchten Sie dieses Eintragsobjekt von sharedPreference entfernen. oky lassen Sie das tun Ich nehme an, dass Sie jsonEntry in mit jsonEntry1 Schlüssel sp gespeichert haben. versuchen Sie, diesen Wert abzurufen.

String jsonEntry =mySharedPreferences.getString("jsonEntry1",null); 
if(jsonEntry != null){ 
    JSONArray completeArray = new JSONArray(jsonEntry); 
    for (int i=0;i<completeArray .length();i++){ 
    JSONObject finalEntry=(JSONObject) completeArray .get(i); 
     if(finalEntry.has("entry")){ 
     finalEntry.remove("entry");// for remove only one entry object you need to add your own logic 
     } 
    } 
} 

nach dem Fertig die Schleife Ihre completeArray sein wird ‚Eintrag‘ frei Arrayobject und Sie können es wieder gestellt sharedpreference ..

Hoffe, es funktioniert. (möglicherweise müssen Sie diese Logik anpassen)

+0

Danke Tanim Reja für Ihre Wiederholung, Sie haben Recht Ich habe meine JSON-Zeichenfolge in eine Datei gespeichert. aber leider konnte ich den Eintrag logView.setOnLongClickListener (new View.OnLongClickListener() nicht entfernen. Ich versuche es auf einem sharedprefrance zu speichern. finde die Lösung wahrscheinlich einfacher. Ich bin mir nicht sicher, ob ich falsch oder richtig bin? – Riz

+0

Wenn Sie eine Idee haben, einen Eintrag aus Json aus der Datei zu entfernen, werde ich schätzen. Ich werde zurück in die Datei. Speichern Sie JSON auf gemeinsame Präferenz zu kompliziert – Riz

+0

yah können Sie lesen und wieder und wieder in eine Datei schreiben ... können Sie versuche, das json zu lesen, nachdem du es in eine datei geschrieben hast ... dann wäre es einfach. aber du liegst falsch bei SharedPreference ... das ist nicht kompliziert ... es ist zu einfach als das dateisystem. du musst es versuchen .. (Ich denke, Ihre JSON-Struktur ist sehr kompliziert, Sie können die Logik nach Möglichkeit neu anordnen. –

0

Um einen bestimmten gespeicherten Einstellungen entfernen Sie dann verwenden

SharedPreferences.Editor editor = settings.edit(); 
editor.remove("tag_to_delete"); 
editor.commit(); 

(oder)

das Entfernen meth Verwendung Od ist wahrscheinlich der richtige Weg.

mPrefs = PlaniActivity.this.getPreferences(MODE_PRIVATE); 
SharedPreferences.Editor prefsEditor = mPrefs.edit(); 
prefsEditor.remove("list"); 

Sie auch nur einen Editor benötigen, so einfach weiter Artikel

prefsEditor.remove("platamatBeansArrayList"); 

entfernen und Sie müssen nur einmal ganz am Ende bewerben oder zu begehen, weil alle Ereignisse auf der Warteschlange befinden.

prefsEditor.apply(); 
+0

Dank AndroidEnthusiastic für Ihre Wiedergabe..ich kann nicht sofort auf meine Arbeit zugreifen Ich werde es später testen Ich werde Sie wissen lassen – Riz