所以我一直在寻找通过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 CREATOR = new Parcelable.Creator (){
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 arrList = new ArrayList();
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 getArrayList(){return arrList;}
public void setArrayList(ArrayList arr){this.arrList = arr;}
public int getMyInt(){return myInt;}
public void setMyInt(int newInt){this.myInt = newInt;}
MyPointsList(){this.arrList = new ArrayList();}
public MyPointsList(Parcel in){
myInt = in.readInt();
myString = in.readString();
arrList = new ArrayList();
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 CREATOR = new Parcelable.Creator(){
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的新手。
谢谢!