我创建了一个类似于下面的类,它实现了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中收到以下错误:
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)
JSONParser.java的第55行是:
fcodeName = in.readString();
为什么会这样?如何解决这个问题?
答案 0 :(得分:0)
试试这个:
JSONParser theCity = (JSONParser) getIntent().getExtras().getParcelable("SelectedCityDetails");
另外
detailsActivityLauncher.putExtra("SelectedCityDetails", aCity);
希望这有帮助!