我已經創建了一個類象下面,實現Parcelable
Parcelable對象造成錯誤
package com.fyrweel.cityinfo;
import android.os.Parcel;
import android.os.Parcelable;
public class JSONParser implements Parcelable {
public String fcodeName;
public String toponymName;
public String countrycode;
public String fcl;
public String fclName;
public String name;
public String wikipedia;
public Double lng;
public Double lat;
public String fcode;
public Long geonameId;
public Long population;
public int describeContents() {
return 0;
}
// write your object's data to the passed-in Parcel
public void writeToParcel(Parcel out, int flags) {
out.writeString(fcodeName);
out.writeString(toponymName);
out.writeString(countrycode);
out.writeString(fcl);
out.writeString(fclName);
out.writeString(name);
out.writeString(wikipedia);
out.writeString(fcode);
out.writeLong(geonameId);
out.writeLong(population);
out.writeDouble(lng);
out.writeDouble(lat);
}
public static final Parcelable.Creator<JSONParser> CREATOR = new Parcelable.Creator<JSONParser>() {
public JSONParser createFromParcel(Parcel in) {
return new JSONParser(in);
}
public JSONParser[] newArray(int size) {
return new JSONParser[size];
}
};
JSONParser(Parcel in) {
fcodeName = in.readString();
toponymName = in.readString();
countrycode = in.readString();
fcl = in.readString();
fclName = in.readString();
name = in.readString();
wikipedia = in.readString();
fcode = in.readString();
geonameId = in.readLong();
population = in.readLong();
lng = in.readDouble();
lat = in.readDouble();
}
}
然後我試圖從一個活動通過這個類的一個對象到另一個使用意圖。在第一個活動,我用下面的代碼:
Intent detailsActivityLauncher = new Intent(MainActivity.this, DetailsActivity.class);
detailsActivityLauncher.putExtra("SelectedCityDetails", (Parcelable)aCity);
startActivityForResult(detailsActivityLauncher, 0);
而在第二個活動將下面的代碼來接受它:
Intent recievedIntent = getIntent();
JSONParser theCity = (JSONParser)recievedIntent.getParcelableExtra("SelectedCityDetails");
當第二次活動負載,獲得的logcat以下錯誤: JSONParser.java的
04-15 15:50:03.680: E/AndroidRuntime(2958): FATAL EXCEPTION: main
04-15 15:50:03.680: E/AndroidRuntime(2958): Process: com.fyrweel.cityinfo, PID: 2958
04-15 15:50:03.680: E/AndroidRuntime(2958): java.lang.NullPointerException
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.fyrweel.cityinfo.JSONParser.<init>(JSONParser.java:55)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.fyrweel.cityinfo.MainActivity$1.onSuccess(MainActivity.java:66)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:232)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:220)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.loopj.android.http.AsyncHttpResponseHandler.onSuccess(AsyncHttpResponseHandler.java:245)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:365)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:135)
04-15 15:50:03.680: E/AndroidRuntime(2958): at android.os.Handler.dispatchMessage(Handler.java:102)
04-15 15:50:03.680: E/AndroidRuntime(2958): at android.os.Looper.loop(Looper.java:136)
04-15 15:50:03.680: E/AndroidRuntime(2958): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-15 15:50:03.680: E/AndroidRuntime(2958): at java.lang.reflect.Method.invokeNative(Native Method)
04-15 15:50:03.680: E/AndroidRuntime(2958): at java.lang.reflect.Method.invoke(Method.java:515)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-15 15:50:03.680: E/AndroidRuntime(2958): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-15 15:50:03.680: E/AndroidRuntime(2958): at dalvik.system.NativeStart.main(Native Method)
線55:
fcodeName = in.readString();
這是怎麼發生的?如何解決這個問題?
由於某種原因,'recievedIntent.getParcelableExtra(「SelectedCityDetails」)'很可能返回'null'。在你試圖對它進行拆解之前,你應該確認你有一個額外的關鍵「SelectedCityDetails」**。或者使用調試器或者使用'if(recievedIntent.hasExtra(「SelectedCityDetails」){...' –