0

I am trying to use parcelable to make a simple edit form. The data was received from an array list. But, when I try to run it, there is an error:

Attempt to invoke virtual method 'int com.insiteprojectid.practiceadapter.user.Student.getId()' on a null object reference

These are my codes:

public class StudentActivity extends AppCompatActivity {

private ListView lv;
private CustomUsersAdapter customUsersAdapter;
private TextView emptyTextView;
private StaticStudent staticStudent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_student);
    customUsersAdapter = new CustomUsersAdapter(this, new ArrayList<Student>());
    lv = (ListView)findViewById(R.id.listView);
    lv.setAdapter(customUsersAdapter);
    emptyTextView = (TextView)findViewById(R.id.emptyView);
    lv.setEmptyView(emptyTextView);
    staticStudent = StaticStudent.getInstance();

    FloatingActionButton floatingActionButton = (FloatingActionButton)findViewById(R.id.fabButton);
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),AddStudentActivity.class);
            intent.putExtra("action","add");
            startActivity(intent);
        }
    });

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getApplicationContext(), AddStudentActivity.class);
            Student student = staticStudent.get(position);
            intent.putExtra("StudentList", student);
            startActivity(intent);
        }
    });
}

private void populateStudentDummies() {
    ArrayList<Student> studentList = new ArrayList<>();
    studentList.add(new Student(1, "3135136188", "TRI FEBRIANA SIAMI", "tri.febriana@unj.ac.id", "021577888"));
    studentList.add(new Student(2, "3135136192", "UMMU KULTSUM", "ummu.kultsum@unj.ac.id", "021577888"));
    studentList.add(new Student(3, "3135136215", "ANDREAN OKTAVIANUS H.S.", "andrean.ohs@unj.ac.id", "021577888"));
    staticStudent.AddStudents(studentList);
    customUsersAdapter = new CustomUsersAdapter(this,staticStudent.getList());
    lv.setAdapter(customUsersAdapter);
}

@Override
protected void onResume() {
    //overriding method
    super.onResume();
    //check size of student list
    if(staticStudent.count()==0) {
        customUsersAdapter = new CustomUsersAdapter(this, new ArrayList<Student>());
        //set emptyView
        emptyTextView.setText("No Student Found");
    } else{
        customUsersAdapter = new CustomUsersAdapter(this, staticStudent.getList());
    }
    lv.setAdapter(customUsersAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_student_list, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.createDummy:
            populateStudentDummies();
            return true;
        case R.id.clearList:
            StaticStudent.getInstance().clearList();
            customUsersAdapter = new CustomUsersAdapter(this, new ArrayList<Student>());
            lv.setAdapter(customUsersAdapter);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

the Parcelable subclass:

public class Student implements Parcelable{
    private int id;
    private String noreg;
    private String name;
    private String mail;
    private String phone;

    public Student(int id, String noreg, String name, String mail, String phone){
        this.id = id;
        this.name = name;
        this.mail = mail;
        this.phone = phone;
        this.noreg = noreg;
    }

    protected Student(Parcel in) {
        this.id = in.readInt();
        this.noreg = in.readString();
        this.name = in.readString();
        this.mail = in.readString();
        this.phone = in.readString();
    }

    public Student(){

    }

    public static final Creator<Student> CREATOR = new Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel in) {
        return new Student(in);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNoreg() {
        return noreg;
    }

    public void setNoreg(String noreg) {
        this.noreg = noreg;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(getId());
        dest.writeString(getNoreg());
        dest.writeString(getName());
        dest.writeString(getMail());
        dest.writeString(getPhone());
    }
}

and then the method

public class StaticStudent {
    private static ArrayList<Student> studentList = new ArrayList<>();
    private static StaticStudent instance = new StaticStudent();

    public static ArrayList<Student> getStudentList() {
        return studentList;
    }

    public static void setStudentList(ArrayList<Student> studentList) {
        StaticStudent.studentList = studentList;
    }

    public static StaticStudent getInstance() {
        return instance;
    }

    public static void setInstance(StaticStudent instance) {
        StaticStudent.instance = instance;
    }

    public void addStudent(Student student){
        student.setId(nextId());
        studentList.add(student);
    }

    public int nextId(){
        return studentList.size()+1;
    }

    public Student removeLast(){
        Student student = studentList.remove(studentList.size()-1);
        return student;
    }

    public Student get(int index){
        Student student = studentList.get(index);
        return student;
    }

    public void set(int index, Student student){
        studentList.set(index, student);
    }

    public Student remove(int index){
        Student student = studentList.remove(index);
        resetCounterId(index);
        return student;
    }

    public Student getLast(){
        Student student = studentList.get(studentList.size() - 1);
        return student;
    }

    public void AddStudents(ArrayList<Student> students){
        studentList.addAll(students);
        resetCounterId(0);
    }

    public ArrayList<Student> getList(){
        return studentList;
    }

    public int count(){
        return studentList.size();
    }

    private void resetCounterId(int i){
        for (int j = i; j < studentList.size(); j++) {
            studentList.get(j).setId(j);
        }
    }

    public void clearList(){
        studentList.clear();
    }

}    

this is the logcat

10-20 11:23:34.753 22842-22842/com.insiteprojectid.practiceadapter E/AndroidRuntime: FATAL EXCEPTION: main Process: com.insiteprojectid.practiceadapter, PID: 22842 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.insiteprojectid.practiceadapter/com.insiteprojectid.practiceadapter.AddStudentActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.insiteprojectid.practiceadapter.user.Student.getId()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522) at android.app.ActivityThread.access$800(ActivityThread.java:169) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.insiteprojectid.practiceadapter.user.Student.getId()' on a null object reference at com.insiteprojectid.practiceadapter.AddStudentActivity.onCreate(AddStudentActivity.java:30) at android.app.Activity.performCreate(Activity.java:5975) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)  at android.app.ActivityThread.access$800(ActivityThread.java:169)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)  at android.os.Handler.dispatchMessage(Handler.java:111)  at android.os.Looper.loop(Looper.java:194)  at android.app.ActivityThread.main(ActivityThread.java:5546)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

Sᴀᴍ Onᴇᴌᴀ
  • 8,218
  • 8
  • 36
  • 58

0 Answers0