RuntimeException - Посылка android.os.Parcel@9a7cc8: Неизвестный код неизвестного типа 7274595 - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь отправить объект Parcelable из одного действия в другое, но когда я пытаюсь вернуть объект из дополнений Intent, я получаю:

Исключение времени выполнения "Parcel android.os.Посылка @ 9a7cc8: Unmarshalling неизвестный код типа 7274595 "

Код:

Запуск деятельности

public class Activity1 {

    public static void start(Activity currrentActivity, V1Modal modal) {
        Intent auIntent = new Intent(currrentActivity, Activity1.class);
        if (modal != null) {
            auIntent.putExtra(MODAL_DATA_KEY, modal);
        }
        auIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        currrentActivity.startActivity(auIntent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_useriq);
       if (getIntent().getExtras() != null) {

           getIntent().setExtrasClassLoader(V1Modal.class.getClassLoader());
           if (getIntent().getExtras().containsKey(MODAL_DATA_KEY)) {
                modal = (V1Modal) getIntent().getExtras().getParcelable(MODAL_DATA_KEY);
           }
       }
    }

V1Модель Класс

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

        @Override
        public V1Modal[] newArray(int size) {
            return new V1Modal[size];
        }
    };
    public String id;
    String name;
    public Node layout;

    private V1Modal() {
    }

    protected V1Modal(Parcel in) {
        this.id = in.readString();
        this.name = in.readString();
        this.layout = in.readParcelable(UINode.class.getClassLoader());
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.id);
        dest.writeString(this.name);
        dest.writeParcelable(this.layout, flags);
    }
}

Класс UiNode

public abstract class UINode implements Parcelable {
    protected UINode(Parcel in) {
        this.bgColor = new ArrayList<>();
        in.readList(this.bgColor, Integer.class.getClassLoader());
        if (this.bgColor.size() == 0) {
            this.bgColor = null;
        }
        this.borderColor = new ArrayList<>();
        in.readList(this.borderColor, Integer.class.getClassLoader());
        if (this.borderColor.size() == 0) {
            this.borderColor = null;
        }
        this.borderWidth = in.readInt();
        this.borderRadius = new ArrayList<>();
        in.readList(this.borderRadius, Integer.class.getClassLoader());
        if (this.borderRadius.size() == 0) {
            this.borderRadius = null;
        }

        this.id = in.readString();
        this.type = in.readString();
        this.l = in.readString();
        this.r = in.readString();
        this.t = in.readString();
        this.b = in.readString();
        shadowRadius = in.readInt();
        shadowDx = in.readInt();
        shadowDy = in.readInt();
        this.shadowColor = new ArrayList<>();
        in.readList(this.shadowColor, Integer.class.getClassLoader());
        if (this.shadowColor.size() == 0) {
            this.shadowColor = null;
        }
    }

     public void writeToParcel(Parcel dest, int flags) {
        dest.writeList(this.bgColor);
        dest.writeList(this.borderColor);
        dest.writeInt(this.borderWidth);
        dest.writeList(this.borderRadius);
        dest.writeString(this.id);
        dest.writeString(this.type);
        dest.writeString(this.l);
        dest.writeString(this.r);
        dest.writeString(this.t);
        dest.writeString(this.b);
        dest.writeInt(shadowRadius);
        dest.writeInt(shadowDx);
        dest.writeInt(shadowDy);
        dest.writeList(shadowColor);
    }
    public int describeContents() { return 0; }

Класс узла

public class Node extends UINode {
    public static final Creator<Node> CREATOR = new Creator<Node>() {
      @Override
      public Node createFromParcel(Parcel source) {
        return new Node(source);
      }

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

   protected Node(Parcel in) {
    super(in);
    this.children = in.readArray(UINode.class.getClassLoader());
   }

  @Override
  public int describeContents() {
    return 0;
  }

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    super.writeToParcel(dest, flags);
    dest.writeArray(this.children);
  }
}

Я ввожу Activity1из Xposed, подключите после метода Instrumentation.newActivity.

PS: Раньше у меня было ClassNotFoundException при получении модели из дополнений Intent, затем я устанавливал загрузчик классов при попытке получить дополнения из Intent.

...