Previously I create a ticket because I have this error
Attempt to invoke interface method 'int java.util.List.size()' on a null object reference?
I have this error when I wanted to close all applications in my phone to have less memory on it.
I show you all my files before my modification
List.java
public class List extends AppCompatActivity implements ItemDialog.ItemDialogListener, AdapterView.OnItemClickListener {
private ListView listView ;
private Button addBtn ;
private ArrayList<EltList> eltList ;
private ArrayAdapter<EltList> adapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
addBtn = findViewById(R.id.addTask);
listView = findViewById(R.id.listView);
eltList = FileHelper.readData(this);
adapter = new TextAdapter(this,eltList);
listView.setAdapter(adapter);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDialog();
}
});
listView.setOnItemClickListener(this);
}
public void openDialog(){
ItemDialog itemDialog = new ItemDialog();
itemDialog.show(getSupportFragmentManager(),"example dialog");
}
@Override
public void applyText(String newTask, String newDateTimeTask) {
EltList elt = new EltList(newTask,newDateTimeTask);
adapter.add(elt);
FileHelper.writeData(eltList,List.this);
Toast.makeText(List.this,"Item added",Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
eltList.remove(position);
adapter.notifyDataSetChanged();
FileHelper.writeData(eltList,this);
Toast.makeText(this,"Delete",Toast.LENGTH_SHORT).show();
}
}
TextAdapter.java
public class TextAdapter extends ArrayAdapter<EltList> {
public TextAdapter(Context context, java.util.List<EltList> eltList){
super(context,0,eltList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item,parent,false);
}
ItemList itemList = (ItemList) convertView.getTag();
if(itemList == null){
itemList = new ItemList();
itemList.taskName = convertView.findViewById(R.id.task);
itemList.taskDate = convertView.findViewById(R.id.task_date) ;
convertView.setTag(itemList);
}
EltList eltList = getItem(position);
itemList.taskName.setText(eltList.getTaskName());
itemList.taskDate.setText(eltList.getTaskDate());
return convertView ;
}
private class ItemList{
public TextView taskName ;
public TextView taskDate ;
}
}
FileHelper
public class FileHelper {
public static final String FILENAME = "file.dat";
public static void writeData(ArrayList<EltList> items, Context context){
try{
FileOutputStream fos = context.openFileOutput(FILENAME,Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(items);
oos.close();
}
catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}
public static ArrayList<EltList> readData(Context context){
ArrayList<EltList> itemList = null ;
try{
FileInputStream fis = context.openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(fis);
itemList = (ArrayList<EltList>) ois.readObject();
}
catch (FileNotFoundException e){
e.printStackTrace();
itemList = new ArrayList<>();
}
catch (IOException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return itemList ;
}
}
So I modify this
ArrayList<EltList> itemList = null ;
in my FileHelper by
ArrayList<EltList> itemList = new ArrayList<>() ;
It works but if I previously write tasks it removes it.
So I remove keep ArrayList<EltList> itemList = null
and I wanted to catch the error with NullPointerException
but it doesn't work.
UPDATE
It's not a duplicate I just wanted to explain why all my previous task were clear, my answer is how can I keep my previous task in my list.