Вопрос по android – как передавать объекты между намерениями

1

У меня есть класс, который содержит данные, которые я хочу передать между намерениями, у этого класса есть arraylist, который содержит объекты другого класса. это мой класс

    public class ParsedData implements Parcelable {

        public String error;
        public float protectionLevel;
        public int protectionLevelColor;
        public double lastBackup;
        public boolean compressedType;
        public Long driveFreeSpaceSize;
        ArrayList<Item>Items = new ArrayList<Item>();
}

class Item {

    public String name;
    public float percentage;
    public int files;
    public long size;
}

Как я могу отправить этот класс между намерениями?

Помогает ли это реализоватьParcelable вItem? Tony the Pony
Вы должны прочитатьmobileorchard.com/…, Немного информации о намерениях и передаче дополнительных данных. Также немного об использовании данных и возврате данных из Intent. Hidde

Ваш Ответ

4   ответа
1

Parcelable object) и реализовать интерфейс parcelable в вашем классе.

я не могу отправить arraylist, это моя проблема AnasBakez
Другое решение - вы можете создать статический класс со списком массивов, а затем передать его в другое приложение без реализации Parcelable. Но это не очень хорошая практика.
3

class Item реализуетSerializable интерфейс и использованиеIntent.putExtra (String, Serializable), посколькуArrayList реализует такжеSerializable интерфейс, вы можете передать весьItems объект.

1

это ответ:

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

public class ParsedData implements Parcelable  {

    public String error;
    public float protectionLevel;
    public int protectionLevelColor;
    public double lastBackup;
    public boolean compressedType;
    public Long statusSendTime;
    ArrayList<Item>Items = new ArrayList<Item>();

    //---------------------Constructors---------------------------
    public ParsedData() { ; };

    public ParsedData(Parcel in) {
        readFromParcel(in);
    }
    //------------------------------------------------------------

    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(error);
        dest.writeFloat(protectionLevel);
        dest.writeInt(protectionLevelColor);
        dest.writeDouble(lastBackup);
        dest.writeByte((byte) (compressedType ? 1 : 0));  
        dest.writeLong(statusSendTime);
        dest.writeList(Items);

    }

    private void readFromParcel(Parcel in) {
        error = in.readString();
        protectionLevel = in.readFloat();
        protectionLevelColor = in.readInt();
        lastBackup = in.readDouble();
        compressedType =in.readByte() == 1; 
        statusSendTime = in.readLong();
        in.readList(Items,Item.class.getClassLoader() );

    }

     public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
                    public ParsedData createFromParcel(Parcel in) {
                        return new ParsedData(in);
                    }

                    public ParsedData[] newArray(int size) {
                        return new ParsedData[size];
                    }
                };
}

class Item implements Parcelable {

    public String name;
    public float percentage;

    //---------------------Constructors---------------------------
    public Item() {
       }
    public Item(Parcel in) {
          readFromParcel(in);
       }
    //------------------------------------------------------------

    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeFloat(percentage);
    }
    public static final Creator<Item> CREATOR = new Creator<Item>() {
          public Item createFromParcel(Parcel source) {
             return new Item(source);
          }
          public Item[] newArray(int size) {
             return new Item[size];
          }
       };
       private void readFromParcel(Parcel in) {
           this.name = in.readString();
           this.percentage = in.readFloat();
           }
}

и в вызывающей деятельности

    ParsedData data = new PArsedData();
    Intent intentBreakDown = new Intent(this,BreakDownBarActivity.class);
    intentBreakDown.putExtra("data", data);
    startActivity(intentBreakDown);

в вызываемой активности (BreakDownBarActivity в моем случае)

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.breakdownbar);

        Bundle b = getIntent().getExtras();
        ParsedData data = (ParsedData)b.getParcelable("data");
    }
1

Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.

В качестве альтернативы я бы попыталсяItem воплощать в жизньParcelable, также.

Отказоустойчивая альтернатива - записать структуру данных в строку JSON, что также позволяет передавать данные в другие приложения, которые не имеют доступа к вашемуParsedData учебный класс.

большое спасибо, на самом деле это была моя проблема, я позволил классу Item реализовать Parcelable AnasBakez

Похожие вопросы