android - 将可分割对象传递给 Intent 时丢失信息

标签 android android-intent parcelable

我想将对象(可解析)的数组列表传递给 Intent 以处理它。 arrayList 包含 3 个对象,当我将其传递给下一个 Intent 时,第三个对象丢失,因此当我尝试读取列表时我有一个空指针

telecharger.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

         recupParcours= new GetParcours(idLangue);
         recupParcours.start();
         try {
            recupParcours.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         for(Parcours parcours: recupParcours.getListeParcours()) 
                System.out.println("Parcours: " + parcours);
         Intent intent = new Intent();
         intent.putParcelableArrayListExtra("listeParcoursADL",recupParcours.getListeParcours());

        intent.setClass(ChoiceLanguage.this,Test.class);

        startActivity(intent);


        }
    });

在 logcat 中我可以显示

 12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41d6f130
12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41e05398
12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41e07e00

现在在测试课

public class Test extends Activity {
    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);
        setContentView(R.layout.download_parcours);
          ArrayList<Parcours>listeParcours= getIntent().getParcelableArrayListExtra("listeParcoursADL");
         for(Parcours parcours: listeParcours) 
            System.out.println("Parcours: " + parcours);
    }
}

我可以在日志中显示:

    12-14 13:53:12.223: I/System.out(10884): Parcours: com.dev.entity.Parcours@41bf03e8
12-14 13:53:12.223: I/System.out(10884): Parcours: com.dev.entity.Parcours@41ba5310
12-14 13:53:12.223: I/System.out(10884): Parcours: null

我不知道为什么最后一个对象被跳过。 此外,还有这一行:

 intent.putParcelableArrayListExtra("listeParcoursADL",recupParcours.getListeParcours());

下一个 Intent 大约需要 5 秒才能显示,如果没有它,它是瞬时的

Parours代码

package com.dev.entity;

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;


public class Parcours  implements Parcelable{

 String parcours_lang_info_name;
 String parcours_lang_info_desc;
 int parcours_id;
 String parcours_image;
 int parcours_map;
 int parcours_realite_augmentee;
 int parcours_qrcode;
 int parcours_visite_manuelle;
 ArrayList<POI> listesPOI;
 public Parcours() {
    super();
    listesPOI= new ArrayList<POI>();
}



 public Parcours(String parcours_lang_info_name, String parcours_lang_info_desc,
        int parcours_id, String parcours_image, int parcours_map,
        ArrayList<POI> listesPOI, int parcours_realite_augmentee,
        int parcours_qrcode, int parcours_visite_manuelle) {
    super();
    this.parcours_lang_info_name = parcours_lang_info_name;
    this.parcours_lang_info_desc = parcours_lang_info_desc;
    this.parcours_id = parcours_id;
    this.parcours_image = parcours_image;
    this.parcours_map = parcours_map;
    this.listesPOI = listesPOI;
    this.parcours_realite_augmentee = parcours_realite_augmentee;
    this.parcours_qrcode = parcours_qrcode;
    this.parcours_visite_manuelle = parcours_visite_manuelle;
}

 public Parcours (Parcel in) {
        this();
        this.parcours_lang_info_name = in.readString();
        this.parcours_lang_info_desc = in.readString();
        this.parcours_id = in.readInt();
        this.parcours_image = in.readString();
        this.parcours_map = in.readInt();
        in.readTypedList(listesPOI,POI.CREATOR);
        this.parcours_realite_augmentee = in.readInt();
        this.parcours_qrcode = in.readInt();
        this.parcours_visite_manuelle = in.readInt();

    }

@Override
    public String toString() {

        /*return "parcours_lang_info_name: "+parcours_lang_info_name+" " + "parcours_lang_info_desc: "+parcours_lang_info_desc+" "
                +"parcours_id: " + parcours_id+" " +"parcours_image: "+parcours_image+" "+"parcours_map: "+parcours_map+" "+"parcours_realite_augmentee: "+ parcours_realite_augmentee+" "
                + "parcours_qrcode: "+ parcours_qrcode+" "+"parcours_visite_manuelle: "+parcours_visite_manuelle+" "+"listesPOI: "+listesPOI+" ";*/
    return super.toString();
    }

public String getParcours_lang_info_name() {
    return parcours_lang_info_name;
}
public void setParcours_lang_info_name(String parcours_lang_info_name) {
    this.parcours_lang_info_name = parcours_lang_info_name;
}
public String getParcours_lang_info_desc() {
    return parcours_lang_info_desc;
}
public void setParcours_lang_info_desc(String parcours_lang_info_desc) {
    this.parcours_lang_info_desc = parcours_lang_info_desc;
}
public int getParcours_id() {
    return parcours_id;
}
public void setParcours_id(int parcours_id) {
    this.parcours_id = parcours_id;
}
public String getParcours_image() {
    return parcours_image;
}
public void setParcours_image(String parcours_image) {
    this.parcours_image = parcours_image;
}
public int getParcours_map() {
    return parcours_map;
}
public void setParcours_map(int parcours_map) {
    this.parcours_map = parcours_map;
}
public int getParcours_realite_augmentee() {
    return parcours_realite_augmentee;
}
public void setParcours_realite_augmentee(int parcours_realite_augmentee) {
    this.parcours_realite_augmentee = parcours_realite_augmentee;
}
public int getParcours_qrcode() {
    return parcours_qrcode;
}
public void setParcours_qrcode(int parcours_qrcode) {
    this.parcours_qrcode = parcours_qrcode;
}
public int getParcours_visite_manuelle() {
    return parcours_visite_manuelle;
}
public void setParcours_visite_manuelle(int parcours_visite_manuelle) {
    this.parcours_visite_manuelle = parcours_visite_manuelle;
}

public ArrayList<POI> getPOI() {
    return listesPOI;
}

public void setPOI(ArrayList<POI> listesPOI) {
    this.listesPOI = listesPOI;
}



public static final Parcelable.Creator<Parcours> CREATOR = new Parcelable.Creator<Parcours>()
{
    @Override
    public Parcours createFromParcel(Parcel source)
    {
        return new Parcours(source);
    }

    @Override
    public Parcours[] newArray(int size)
    {
    return new Parcours[size];
    }
};




@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}



@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeString(parcours_lang_info_name);
    dest.writeString(parcours_lang_info_desc);
    dest.writeInt(parcours_id);
    dest.writeString(parcours_image);
    dest.writeInt(parcours_map);

    dest.writeInt(parcours_realite_augmentee);
    dest.writeInt(parcours_qrcode);
    dest.writeInt(parcours_visite_manuelle);
    dest.writeTypedList(listesPOI);
}


}

非常感谢

最佳答案

您写包裹的方式与阅读包裹的方式不同:

in.readString();
in.readString();
in.readInt();
in.readString();
in.readInt();

in.readTypedList(listesPOI,POI.CREATOR); <-- Mistmatch from here
in.readInt();
in.readInt();
in.readInt();

但是

dest.writeString();
dest.writeString();
dest.writeInt();
dest.writeString();
dest.writeInt();

dest.writeInt(); <-- Mistmatch from here
dest.writeInt();
dest.writeInt();
dest.writeTypedList();

关于android - 将可分割对象传递给 Intent 时丢失信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879235/

相关文章:

android - tablayout 中的 recyclerview 只被调用一次

c# - 如何在 MonoDroid 中使用应用内结算?

java - 等待更新程序单例

android - 为什么我的应用程序在启动照片 Intent 之后但在调用 onActivityResult() 之前崩溃?

android - 如何在 Android 上使用 MediaStore 将相机中的数据保存到磁盘?

android - 如何将 Parcelable 对象发送到 DialogFragment?

android BluetoothDevice.getName() 返回 null

android - 警告 : API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'

Android Intent 传递 parcelable 对象与传递 Json 字符串

android - Scala 支持 Android 的 Parcelables 吗?