У меня есть приложение, которое работает нормально, пока я не нажму одну из двух кнопок, обе из которых сохранят мой текущий пользовательский класс, который хранит четыре ArrayList<String>
в виде файла JSON.
Ниже приведен мой код для загрузки и сохранения моего JSON-файла в / из SharedPreferences:
@Override
protected void onResume() {
super.onResume();
SharedPreferences myPrefs = getPreferences(MODE_PRIVATE);
Gson gson = new Gson();
String json = myPrefs.getString("MyObject", "");
StudentArray obj = gson.fromJson(json, StudentArray.class);
studentsFirstNames = obj.studentFirstName;
studentsLastNames = obj.studentLastName;
studentsCourses = obj.studentCourse;
studentsYearsOfStudy = obj.studentYearOfStudy;
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences myPrefs = getPreferences(MODE_PRIVATE);
Editor prefsEditor = myPrefs.edit();
Gson gson = new Gson();
StudentArray example = new StudentArray(studentsFirstNames, studentsLastNames, studentsCourses, studentsYearsOfStudy);
String json = gson.toJson(example);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
}
Журнал аварийного завершения Logcat
04-26 21:58:38.985 14971-14971/com.adam_smedley.moduleenrollment E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.adam_smedley.moduleenrollment, PID: 14971
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity {com.adam_smedley.moduleenrollment/com.adam_smedley.moduleenrollment.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4089)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:344)
at android.widget.ListView.setAdapter(ListView.java:493)
at com.adam_smedley.moduleenrollment.MainActivity.onActivityResult(MainActivity.java:89)
at android.app.Activity.dispatchActivityResult(Activity.java:6932)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
в порядке, так что кажется, что мойArrayList - это нулевые ссылки на объекты, так как я не могу добавить к ним другую строку или получить .size ()
Может кто-нибудь увидеть какие-либо проблемы с объявлением ниже
static ArrayList<String> studentsFirstNames;
studentsFirstNames = new ArrayList<String>();
studentsFirstNames.add("John");
и с вызовом внутри моего AddNewStudentзанятие
MainActivity.studentsFirstNames.add(firstName);
, которое должно получить доступ к статическому ArrayList studentFirstNames внутри основного занятия и добавить одну строку firstName в ArrayList.
onActivityResult code
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ListAdapter enrollmentAdapter = new CustomAdapter(this, studentsFirstNames, studentsLastNames, studentsCourses, studentsYearsOfStudy);
ListView studentsListView = (ListView) findViewById(R.id.StudentsListView);
studentsListView.setAdapter(enrollmentAdapter);
}
Это определенно вызвано приведенным выше кодом onResume () и onPause (), так как я с тех пор закомментировал его, и мое приложение работает, но оно ничего не сохраняет, поэтому у меня нет постоянства данных.