Die App läuft beim ersten Durchlauf nach dem Löschen der vorherigen Daten. Es stürzt beim zweiten Mal ab und muss gespeicherte Informationen von sharedprefs übernehmen (ich habe es mit HashSets gespeichert).Fehler beim Versuch, Daten zu speichern
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.adam.vaistai", Context.MODE_PRIVATE);
HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("names", null);
HashSet<String> numberSet = (HashSet<String>) sharedPreferences.getStringSet("numbers", null);
HashSet<String> descSet = (HashSet<String>) sharedPreferences.getStringSet("desc", null);
if (set == null){
vaistai.add("Pavyzdys 2017-08-18");
numbers.add(String.valueOf(0));
description.add("Nuo persalimo, vartoti 3 kartus dienoje");
} else {
vaistai = new ArrayList<>(set);
//error
numbers = new ArrayList<>(numberSet);
description = new ArrayList<>(descSet);
}
Verwenden von Protokollen habe ich herausgefunden, dass die App stürzt nach Zeile (Vaistai = new Arraylist <> (set);)
08-26 17:11:00.745 7730-7730/com.example.adam.vaistai E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.adam.vaistai, PID: 7730
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.adam.vaistai/com.example.adam.vaistai.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
logcat dieses zeigt
Das ist der Code von MainActivity.java
package com.example.adam.vaistai;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
ListView listView;
static ArrayList<String> vaistai = new ArrayList<>();
static ArrayList<String> numbers = new ArrayList<>();
static ArrayList<String> description = new ArrayList<>();
static ArrayAdapter arrayAdapter;
public void nextActivity (int pos){
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("index", pos);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.newNote){
vaistai.add("");
numbers.add(String.valueOf(0));
description.add("");
arrayAdapter.notifyDataSetChanged();
nextActivity(vaistai.size()-1);
}
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.adam.vaistai", Context.MODE_PRIVATE);
HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("names", null);
HashSet<String> numberSet = (HashSet<String>) sharedPreferences.getStringSet("numbers", null);
HashSet<String> descSet = (HashSet<String>) sharedPreferences.getStringSet("desc", null);
if (set == null){
vaistai.add("Pavyzdys 2017-08-18");
numbers.add(String.valueOf(0));
description.add("Nuo persalimo, vartoti 3 kartus dienoje");
} else {
vaistai = new ArrayList<>(set);
numbers = new ArrayList<>(numberSet);
description = new ArrayList<>(descSet);
}
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, vaistai);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
nextActivity(i);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
final int item = i;
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.alert_dark_frame)
.setTitle("Ar norite istrinti?")
.setMessage("Irasas bus pasalintas")
.setPositiveButton("Taip", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
vaistai.remove(item);
numbers.remove(item);
description.remove(item);
arrayAdapter.notifyDataSetChanged();
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.adam.vaistai", Context.MODE_PRIVATE);
HashSet<String> numberSet = new HashSet<String>(MainActivity.numbers);
sharedPreferences.edit().putStringSet("numbers", numberSet).apply();
HashSet<String> set = new HashSet<String>(MainActivity.vaistai);
sharedPreferences.edit().putStringSet("names", set).apply();
HashSet<String> descSet = new HashSet<String>(MainActivity.description);
sharedPreferences.edit().putStringSet("desc", descSet).apply();
}
}
)
.setNegativeButton("Ne", null)
.show();
return true;
}
});
}
}