在我的程序中,我必须传递一个使用的可打包对象列表。我的 parcelable 类的代码是:
public class NewsDetail implements Parcelable {
private String author, title, subTitle;
private String abstr, body;
public NewsDetail(String title, String author, String abstr, String body) {
this.title = title;
this.author = author;
this.abstr = abstr;
this.body = body;
}
private NewsDetail(Parcel in) {
title = in.readString();
author = in.readString();
abstr = in.readString();
body = in.readString();
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeString(author);
dest.writeString(abstr);
dest.writeString(body);
}
public static final Parcelable.Creator<NewsDetail> CREATOR = new Parcelable.Creator<NewsDetail>() {
@Override
public NewsDetail createFromParcel(Parcel source) {
return new NewsDetail(source);
}
@Override
public NewsDetail[] newArray(int size) {
return new NewsDetail[size];
}
};
...
other getter methods
...
}
在我的第一个活动中,我创建了列表并将其插入到一个意图中:
ArrayList<NewsDetail> news = new ArrayList<NewsDetail>();
for (int i = 0; i < 10; i++) {
NewsDetail tmp = new NewsDetail("one", "two", "three", "four");
news.add(tmp);
}
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putParcelableArrayListExtra("author", news);
在第二个活动中,我从意图中获取列表:
Intent intent = getIntent();
newsList = new ArrayList<NewsDetail>();
newsList = intent.getParcelableArrayListExtra("author");
在第二个活动中,我尝试获取向量中的字符串,但收到 NullPointerException。有任何想法吗?
编辑:例外是
07-12 12:58:17.985: E/AndroidRuntime(1256): FATAL EXCEPTION: main
07-12 12:58:17.985: E/AndroidRuntime(1256): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app/com.app.SecondActivity}: java.lang.NullPointerException
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.os.Looper.loop(Looper.java:137)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-12 12:58:17.985: E/AndroidRuntime(1256): at java.lang.reflect.Method.invokeNative(Native Method)
07-12 12:58:17.985: E/AndroidRuntime(1256): at java.lang.reflect.Method.invoke(Method.java:511)
07-12 12:58:17.985: E/AndroidRuntime(1256): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-12 12:58:17.985: E/AndroidRuntime(1256): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-12 12:58:17.985: E/AndroidRuntime(1256): at dalvik.system.NativeStart.main(Native Method)
07-12 12:58:17.985: E/AndroidRuntime(1256): Caused by: java.lang.NullPointerException
07-12 12:58:17.985: E/AndroidRuntime(1256): at com.app.SecondActivity.onCreate(SecondActivity.java:116)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.Activity.performCreate(Activity.java:5104)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-12 12:58:17.985: E/AndroidRuntime(1256): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-12 12:58:17.985: E/AndroidRuntime(1256): ... 11 more
SecondActivity 代码是:
private ArrayList<NewsDetail> newsList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_layout);
Intent intent = getIntent();
newsList = new ArrayList<NewsDetail>();
newsList = intent.getParcelableArrayListExtra("author");
TextView central_title = (TextView) findViewById(R.id.central_title);
central_title.setTypeface(Typeface.createFromAsset(getAssets(),
"fonts/Avenir-Next.ttc"));
central_title.setText(newsList.get(0).getTitle());