【发布时间】:2016-02-25 03:59:58
【问题描述】:
我正在使用Jsoup 解析网站。
我在MainActivity 中有一个Map<String, String> cookies。
我需要将值cookies 传递给SecondActivity。
所以我创建了一个类实现Pracelable。
MainActivity 类:
DataPasser dataPass = new DataPasser(id, pw, cookies);
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("data", dataPass);
MainActivity.this.startActivity(intent);
SecondActivity 类:
dataPasser dataPass = getIntent().getParcelableExtra("data");
String id = dataPass.getId();
String pw = dataPass.getPw();
Map<String, String> cookies = dataPass.getCookies();
类实现Parcelable:
public class DataPasser implements Parcelable {
private String id;
private String pw;
Map<String, String> cookies;
public String getId() {
return id;
}
public String getPw() {
return pw;
}
public Map<String, String> getCookies() {
return cookies;
}
public DataPasser(Parcel in) {
this.id = in.readString();
this.pw = in.readString();
in.readMap(cookies, Map.class.getClassLoader()); /** NullPointerException here. **/
}
public DataPasser(String id, String pw, Map<String, String> cookies) {
this.id = id;
this.pw = pw;
this.cookies = cookies;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(id);
out.writeString(pw);
out.writeMap(cookies);
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<DataPasser> CREATOR = new Parcelable.Creator<DataPasser>() {
public DataPasser createFromParcel(Parcel in) {
return new DataPasser(in);
}
public DataPasser[] newArray (int size) {
return new DataPasser[size];
}
};
}
错误日志:
致命异常:主要 进程:com.hsk.hallymloginprac,PID:8071 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.hsk.hallymloginprac/com.hsk.hallymloginprac.MenuActivity}:java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 在 android.app.ActivityThread.access$900(ActivityThread.java:170) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5635) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 android.os.Parcel.readMapInternal(Parcel.java:2305) 在 android.os.Parcel.readMap(Parcel.java:1575) 在 com.hsk.hallymloginprac.DataPasser.(DataPasser.java:37) 在 com.hsk.hallymloginprac.DataPasser$1.createFromParcel(DataPasser.java:83) 在 com.hsk.hallymloginprac.DataPasser$1.createFromParcel(DataPasser.java:81) 在 android.os.Parcel.readParcelable(Parcel.java:2111) 在 android.os.Parcel.readValue(Parcel.java:2020) 在 android.os.Parcel.readArrayMapInternal(Parcel.java:2321) 在 android.os.Bundle.unparcel(Bundle.java:249) 在 android.os.Bundle.getParcelable(Bundle.java:1206) 在 android.content.Intent.getParcelableExtra(Intent.java:5292) 在 com.hsk.hallymloginprac.MenuActivity.onCreate(MenuActivity.java:44) 在 android.app.Activity.performCreate(Activity.java:5580) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2495) 在 android.app.ActivityThread.access$900(ActivityThread.java:170) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5635) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 在 dalvik.system.NativeStart.main(本机方法)
但是,我在 DataPasser 类中有一个 NullPointerException。
如何将Map<String, String> 传递给另一个活动?
【问题讨论】:
-
当你说 It's because Exception 时,那么发布 StackTrace 总是一个好习惯。
-
你有没有初始化你正在经过的地图。检查 cookie 数组可能为空的任何极端情况。
-
@ShreeKrishna 好的。我不知道。我刚刚添加了 StackTrace。
-
DataPasser班级的第 83 行是什么? -
@n.arrow001 我试过了。没有例外。但是,
cookies没有传递给SecondActivity。
标签: android jsoup parcelable