ArrayList Daten speichern mit SharedPreferenceManager

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 2

23.06.2017, 12:48:14 via Website

Ich habe zwei mal eine ArrayList und jeweils einer anderen Activity und die beiden Listen schieben gegenseitig Items hin und her (zumindest theoretisch). Leider kann ich nicht testen ob es funktioniert, weil die Daten bei Activity wechsel nicht gespeichert werden und somit immer wieder zurück gesetzt werden.
Wahrscheinlich hab ich das mit dem SharedPreferenceManager nicht ordentlich hinbekommen.

Könnt ihr mir eventuell weiter helfen?

1. Activity:

public class List1Activity extends AppCompatActivity {
public class ObjList {
    private ArrayList<String> objectList = new ArrayList<>();
}
static ArrayList<Object> objectList= new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list1);


    ObjList obj = new ObjList();
    obj.objectList.add("String 1");
    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = pref.edit();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    editor.putString("objects",json);
    editor.apply();

    mListView = (ListView) findViewById(R.id.object_list_view);
    objectList = Object.getObjectsFromFile("objects.json", this);
    String[] listObjects = new String[objectList.size()];
    for (int i = 0; i < objectList.size(); i++) {
        Object object = objectList.get(i);
        listObjects[i] = object.title;
    }
    final ObjectAdapter adapter = new ObjectAdapter(this, objectList);
    mListView.setAdapter(adapter);
    final Context context = this;
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Object selectedObject = objectList.get(position);
            objectList.remove(selectedObject);
            objectList2.add(selectedObject);
            adapter.notifyDataSetChanged();
    }
    });
};

2. Activity:

public class List2Activity extends AppCompatActivity {

private ListView listView;
static ArrayList objectList2 = new ArrayList();

public class ObjList{
    public ArrayList<String> objectList = new ArrayList<>();
}

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    String[] list2= {""};
    listView = (ListView) findViewById(R.id.testlist2);

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list2);
    listView.setAdapter(arrayAdapter);
    arrayAdapter.notifyDataSetChanged();

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    String json = pref.getString("objects", "");
    Gson gson = new Gson();
    ObjList obj = gson.fromJson(json, ObjList.class);
    Log.d("SECOND_ACTIVITY_TAG","size of ArrayList => "+obj.size());
}
}

Antworten
  • Forum-Beiträge: 2.901

23.06.2017, 13:08:09 via Website

Hallo Daniel,

grundsätzlich kann man bei so etwas die SharedPrefs anwenden, ist allerdings nicht im Sinne des
Erfinders gewesen.

Vernünftigerweise sollte man dazu eine SQLite nehmen oder in Files wegschreiben.

Liebe Grüße - Stefan
[ App - Entwicklung ]

Daniel SchulzPascal P.

Antworten
  • Forum-Beiträge: 2

23.06.2017, 17:27:17 via Website

Hallo Stefan,

habe leider im Internet nur die Möglichkeit mit SharedPrefs gefunden.
Sollen ja jetzt auch keine großartige Daten gespeichert werden sondern in dem Fall nur, dass die Items in die 2. Liste verschoben werden können.

Wie würde deine Methode denn im groben aussehen?

— geändert am 23.06.2017, 17:43:05

Antworten

Empfohlene Artikel