The app runs fine at the first run after deleting previous data. It crashes when it runs second time and has to take saved info from sharedprefs (I saved it with HashSets).
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);
}
Using logs I found out that the app crashes after line (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 shows this
Thats the code of 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;
}
});
}
}