2015-11-02 53 views
1

我創建了兩個類。其中之一有參考其他:Arraylist錯誤類中的我的Android

public class SCHOOL { 

private String schoolid; 
private String schoolname; 
private List<STUDENT> students; 

} 

//getters and setters for schoolid and schoolname; 


public void setStudents(List<STUDENT> students) { 
    this.students = students; 
} 


public List<STUDENT> getStudents() { 
    return this.students; 
} 

public void addStudent(String names, String age) { 
    STUDENT student = new STUDENT(); 
    student.setNames(names); 
    student.setAge(age); 
    students.add(student); 

} 


public class STUDENT { 

private String names; 
private String age; 



public String getNames() { 
    return names; 
} 

public void setNames(String names) { 
    this.names = names; 
} 

public String getAge() { 
    return age; 
} 

public void setAge(String age) { 
    this.age = age; 
} 
} 

以下是我的主類:

public class MainActivity extends AppCompatActivity { 

    static final String tag = "Tag Activity"; 
    List<STUDENT> studentList; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 

    SCHOOL school = new SCHOOL(); 
    school.setStudents(studentList); 
    List<STUDENT> students = school.getStudents(); 


    school.addStudent("kent", "43"); 
    school.addStudent("Winnie", "42"); 
    school.addStudent("Dennis", "41"); 

    studentList.add((STUDENT) students); 
    Log.d(tag, String.valueOf(studentList)); 
    ....... 

以下是從我的邏輯錯誤日誌:

11-01 21:25 :24.348 3049-3049/com.example.spidey.jsontosql W/dalvikvm:threadid = 1:線程以未捕獲的異常退出(group = 0xa4cb4b20) 11-01 21:25:24.360 3049-3049/com.example.spidey。 jsontosql E/AndroidRuntime:致命例外:main 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:進程:com.example.spidey.jsontosql,PID:3049 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql/com.example.spidey.jsontosql/com.example.spidey.jsontosql.MainActivity}:java.lang.NullPointerException 11/01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 11-01 21:25:24.360 3049-3049/com .example.spidey.jsontosql E/AndroidRuntime:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.ActivityThread.access $ 800(ActivityThread.java:135) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.os.Handler.dispatchMessage(Handler.java:102) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.os.Looper.loop(Looper.java:136) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.app.ActivityThread。 main(ActivityThread.java:5001) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在java.lang.reflect.Method.invokeNative(Native Method) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:515) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785) 11-01 21 :25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 11-01 21:25:24.360 3049-3049 /com.example.spidey.jsontosql E/AndroidRuntime:at dalvik.system.NativeStart.main(Native Method) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:由:java.lang.NullPointerException 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at com.example.spidey.jsontosql.SCHOOL.addStudent(SCHOOL.java:50) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at com.example.spidey.jsontosql.MainActivity.onCreate(MainActivity.j ava:35) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.Activity.performCreate(Activity.java:5231) 11-01 21:25 :24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 11-01 21:25:24.360 3049-3049/com.example.spidey .jsontosql E/AndroidRuntime:在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.app。 ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 11-01 21:25:24.360 3049-3049/com.example.spidey。jsontosql E/AndroidRuntime:在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.app。 ActivityThread $ H.handleMessage(ActivityThread.java:1196) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.os.Handler.dispatchMessage(Handler.java:102 ) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在android.os.Looper.loop(Looper.java:136) 11-01 21:25:24.360 3049 -3049/com.example.spidey.jsontosql E/AndroidRuntime:at android.app.ActivityThread.main(ActivityThread.java:5001) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:at java.lang.reflect.Method.invokeNative(Native Method) 11-01 21:25:24.360 3049-3049 /com.example.spidey.jsontosql E/AndroidRuntime:在java.lang.reflect.Method.invoke(Method.java:515) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosqlë/AndroidRuntime:在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在COM .android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 11-01 21:25:24.360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在dalvik.system.NativeStart.main(本地方法) 11-01 21:30:25.020 3049-3049/com.example.spidey.jsontosql I /過程:發送信號。 PID:3049 SIG:9

我嘗試使用我的addStudent方法輸入數據,但程序崩潰了。我的代碼有問題嗎?請幫我糾正..

+0

你在哪裏聲明(和*初始化*)'studentList'? –

+1

崩潰時顯示什麼錯誤? – JeredM

+0

在我的onCreate類的主要活動中。 – Spidey

回答

0

,我認爲你的錯誤是:

studentList.add((STUDENT) students); 

不能直接投出清單的學生。遍歷列表中的每個學生並添加它們。

for (Student student: studentList) { 
    studentList.add(student); 
} 

提供錯誤日誌下一次

+0

更改「私人列表學生;」 of the School class to:「private List students = new ArrayList <>();」 – danieljohngomez

0

我想你錯過了幾架。我同意上面的丹尼爾。 'for each'循環應該工作。

0

顯示我的代碼塊的上方或IDE(logcat中)的日誌 我認爲錯誤是NullPointerEx ...,

school.setStudents(studentList); 

studentList爲空或不使用的init過嗎?

+0

我的程序在達到「school.addStudent(」kent「,」43「)時崩潰;」。什麼是在我的情況下添加學生的正確方法?... – Spidey

+0

java.lang.NullPointerException 11-01 21:25:24。360 3049-3049/com.example.spidey.jsontosql E/AndroidRuntime:在com.example.spidey.jsontosql.SCHOOL.addStudent(SCHOOL.java:50) 您瞭解嗎? school.setStudents(studentList); studentList是NULL,請按照我的答案。 替換'school.setStudents(studentList);'與school.setStudents(新名單); – hoangdv

0

我想這是你正在查看的實際代碼。您正在將學生添加到學校並嘗試找回完整的學生名單。

`..... 
SCHOOL school = new SCHOOL(); 
school.setStudents(studentList); 


school.addStudent("kent", "43"); 
school.addStudent("Winnie", "42"); 
school.addStudent("Dennis", "41"); 

studentList = school.getStudents();; 
Log.d(tag, String.valueOf(studentList)); 
.......`