1

在我的程序中,我必须传递一个使用的可打包对象列表。我的 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());
4

0 回答 0