I am really new to all this stuff so i hope you can help me with my situation. I want that my app get the info of two EditText in the mainactivity , save it (with json on my case) and pass it to another activity and show it on a ListView. But I am having problems with my adapter and my intends.
MainActivity.java
public class MainActivity extends AppCompatActivity {
SharedPreferences sharedPreferences;
EditText place;
EditText description;
Button save;
JournalList journalList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
place = findViewById(R.id.place);
description = findViewById(R.id.description);
save = findViewById(R.id.save);
sharedPreferences = getSharedPreferences("Journal", MODE_PRIVATE);
String json = sharedPreferences.getString("journal", "");
if(json != null){
journalList = new JournalList();
journalList = journalList.fromJson(json);
for (Journal p:journalList.journals
) {
Log.d("Journal", "Place :" + p.place + "Description :" + p.description);
}
}else{
journalList = new JournalList();
}
}
public void clickOnSave (View view) {
save();
openList();
}
/*
Con este metodo pasamos a la actividad donde tenemos guardados los diarios al pulsar el boton
save.
*/
public void openList (){
Intent intent = new Intent(this, ListViewActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("JournalList", journalList);
intent.putExtra("Bundle", bundle);
startActivity(intent);
}
/*
Con este metodo guardamos de manera persistente la informacion introducida en los editText
del layout al hacer click en el boton save.
*/
public void save (){
String newPlace = place.getText().toString();
String newDescription = description.getText().toString();
Journal journal = new Journal();
journal.place = newPlace;
journal.description = newDescription;
journalList.journals.add(journal);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("journal", journalList.toJson());
editor.apply();
Toast.makeText(this, "Data saved", Toast.LENGTH_SHORT).show();
}
}
ListviewActivity.java
public class ListViewActivity extends AppCompatActivity {
ListView list;
ArrayList<JournalList> journalLists;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
list = findViewById(R.id.list);
Bundle bundle = getIntent().getBundleExtra("Bundle");
ArrayList<JournalList> journalLists = (ArrayList<JournalList>) bundle.getSerializable("JournalList");
//Adaptamos el array a nuestra lista
MyAdapter adapter = new MyAdapter(this, android.R.layout.simple_list_item_1, journalLists);
list.setAdapter(adapter);
}
}
MyAdapter.java
public class MyAdapter extends ArrayAdapter<JournalList> {
private Context context;
int itemLayout;
ArrayList<JournalList> JournalLists;
public MyAdapter(@NonNull Context context, int resource, @NonNull List<JournalList> JournalLists) {
super(context, resource, JournalLists);
this.context = context;
itemLayout = resource;
this.JournalLists = (ArrayList<JournalList>) JournalLists;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view= layoutInflater.inflate(itemLayout, parent, false);
TextView placeTV = convertView.findViewById(R.id.placeTV);
TextView descriptionTV = convertView.findViewById(R.id.descriptionTV);
placeTV.setText(JournalLists.indexOf(position));
descriptionTV.setText(JournalLists.indexOf(position));
return view;
}
}
Journal.java
public class Journal implements Serializable {
String place;
String description;}
JournalList.java
public class JournalList implements Serializable {
public ArrayList<Journal> journals;
public JournalList(){
journals = new ArrayList<>();
}
public String toJson (){
Gson gson = new Gson();
String json = gson.toJson(this);
return json;
}
public JournalList fromJson (String json){
Gson gson = new Gson();
JournalList journalList = gson.fromJson(json, JournalList.class);
return journalList;
}
}
After fixing the typo i got this new logcat:
Caused by: java.lang.ClassCastException: com.example.alexj.ejercicio6.JournalList cannot be cast to java.util.ArrayList
at com.example.alexj.ejercicio6.ListViewActivity.onCreate(ListViewActivity.java:26)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)