所以我一直在尋找通過StackOverFlow,似乎無法找到完全解決我的問題的主題。許多人在嘗試使用自定義的可分類時遇到了空指針異常的問題。我已經看到解決方案的問題就像在parcelable類中爲CREATOR添加Static一樣簡單。但是,我沒有找到任何有助於我的事業或對我的情況有所啓發的事情。檢索自定義包裹時的空指針異常
從一個名爲MyPointsList的自定義類訪問座標的ArrayList時,我得到一個空指針異常。在傳遞MyPointsList之前,我能夠訪問MyPointsList中的ArrayList。在檢索實例時,我做了一個快速檢查以確保實例不是空的,它不是,然後繼續訪問ArrayList,在那裏我得到空指針異常。
爲什麼在訪問MyPointsList內的ArrayList時在接收類中收到空指針異常?
下面是以下類的代碼:
MyPoint.java
public class MyPoint implements Parcelable {
private int x;
private int y;
public MyPoint(){
this.x = 0;
this.y = 0;
}
public MyPoint(Parcel in){
this.x = 0;
this.y = 0;
readFromParcel(in);
}
public void setPoint(int px, int py){
this.x = px;
this.y = py;
}
public int getX(){return this.x;}
public int getY(){return this.y;}
public static final Parcelable.Creator <MyPoint> CREATOR = new Parcelable.Creator <MyPoint>(){
public MyPoint createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new MyPoint(source);
}
public MyPoint[] newArray(int size) {
// TODO Auto-generated method stub
return new MyPoint[size];
}
};
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(x);
dest.writeInt(y);
}
public void readFromParcel(Parcel in){
int count = in.dataAvail();
for(int i = 0; i < count; i++){
x = in.readInt();
i++;
y = in.readInt();
}
}
}
MyPointsList.java
public class MyPointsList implements Parcelable {
private ArrayList<MyPoint> arrList = new ArrayList<MyPoint>();
private int myInt = 0;
private String myString = null;
public String getString(){return myString;}
public void setString(String str){this.myString = str;}
public MyPoint getMyPoint(int index){return this.arrList.get(index);}
public ArrayList<MyPoint> getArrayList(){return arrList;}
public void setArrayList(ArrayList<MyPoint> arr){this.arrList = arr;}
public int getMyInt(){return myInt;}
public void setMyInt(int newInt){this.myInt = newInt;}
MyPointsList(){this.arrList = new ArrayList<MyPoint>();}
public MyPointsList(Parcel in){
myInt = in.readInt();
myString = in.readString();
arrList = new ArrayList<MyPoint>();
in.readTypedList(arrList, MyPoint.CREATOR);
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel out, int flags) {
// TODO Auto-generated method stub
out.writeInt(myInt);
out.writeString(myString);
out.writeTypedList(arrList);
}
public static final Parcelable.Creator<MyPointsList> CREATOR = new Parcelable.Creator<MyPointsList>(){
public MyPointsList createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new MyPointsList(source);
}
public MyPointsList[] newArray(int size) {
// TODO Auto-generated method stub
return new MyPointsList[size];
}
};
}
包裝領域:點被MyPoints
public void onClick(View v){
MyPointsList object = new MyPointsList();
object.setMyInt(100);
object.setArrayList(points);
Log.d("DEBUG", object.getMyPoint(5).getX() + " " + object.getMyPoint(5).getY() + " ");
Intent goBack = new Intent(SignHereActivity.this, Menu.class);
goBack.putExtra("parcel" , object);
SignHereActivity.this.startActivity(goBack);
}
});
的ArrayList
Retreiving段
public void getIntentData(){
Intent i = this.getIntent();
if(i.hasExtra("parcel")){
Bundle b = getIntent().getExtras();
object = b.getParcelable("parcel");
Log.d("Debug", object.getArrayList().get(5).getX() + " " + object.getArrayList().get(5).getY());
}
}
如前所述,我經歷過的任何信息,我可以找到我的相關問題進行瀏覽。我非常感謝任何意見和答覆。我爲我的代碼中任何煩人的語法或令人困惑的段落道歉。作爲一個整體,我還是對Java和Android的新手。
謝謝!
我通過將他在問題中的解決方案移到這個答案來解決答案,這個答案基本上是「我解決了它」後。 –