я искал дни здесь в поисках решения, но я не могу его найти. У меня есть действие, которое отправляет объект через действия. Но, когда начинается "readParcelable", после нескольких объектов появляется CastExceptionError, я несколько раз отлаживал этот код, пробовал заменять объекты, комментировать объекты, ничего не работает. Вот код: Все классы реализуют методы Parcelable, writeToParcel, readFromParcel и CREATOR.
@Override
public void onClick(View v) {
carregaDados();
Intent myIntent = new Intent(ctx, Activity_VendaProduto.class);
if (!logradouro.getText().toString().equals("")) {
cliente.setEndereco(endereco); //nothing important here, just another object
gerarVenda(); //who populates my "venda object with data"
myIntent.putExtra("venda", venda);
}
startActivity(myIntent);
}
});
А вот, writeToParcel этого объекта "Venda":
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(numeroContrato);
dest.writeString(numeroProposta);
dest.writeString(observacaoComplementar);
dest.writeString(tipoVenda);
dest.writeString(fidelidade);
dest.writeString(hash);
dest.writeString(oferta);
dest.writeParcelable(visita, flags);
dest.writeParcelable(midia, flags);
dest.writeParcelable(tipoContratoVenda, flags);
dest.writeParcelable(periodoInstalacao, flags);
dest.writeParcelable(produtoAgrupamento, flags);
dest.writeParcelable(formaPagamento, flags);
dest.writeParcelable(vendaInternet, flags);
}
В этом классе у меня есть конструктор, который вызывает метод: "readFromParcel" здесь конструктор:
private Venda(Parcel source) {
readFromParcel(source);
}
А вот и метод readFromParcel (несколько раз проверял порядок элементов на записи и этот метод)
private void readFromParcel(Parcel in) {
numeroContrato = in.readString();
numeroProposta = in.readString();
observacaoComplementar = in.readString();
tipoVenda = in.readString();
fidelidade = in.readString();
hash = in.readString();
oferta = in.readString();
visita = in.readParcelable(Visita.class.getClassLoader());
midia = in.readParcelable(Midia.class.getClassLoader());
tipoContratoVenda = in.readParcelable(TipoContratoVenda.class.getClassLoader());
periodoInstalacao = in.readParcelable(Periodo.class.getClassLoader());
produtoAgrupamento = in.readParcelable(ProdutoAgrupamento.class.getClassLoader());
formaPagamento = in.readParcelable(FormaPagamento.class.getClassLoader());
vendaInternet = in.readParcelable(VendaInternet.class.getClassLoader());
}
Все эти методы readParcelable принадлежат пользовательскому объекту, и класс этих объектов также реализует Parcelable и все его методы.
здесь ошибка LogCat возникает в этой строке:
periodoInstalacao = in.readParcelable(Periodo.class.getClassLoader());
produtoAgrupamento = in.readParcelable(ProdutoAgrupamento.class.getClassLoader());
Пробовал комментировать, заменять, но ошибка сохраняется на соседних объектах.
Логкат:
12:20:22.493 526 projetoTeste ERROR AndroidRuntime FATAL EXCEPTION: main
12:20:22.493 526 projetoTeste ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{projetoTeste/projetoTeste.controle.Activity_VendaProduto}: java.lang.ClassCastException: projetoTeste.dto.Periodo cannot be cast to projetoTeste.dto.ProdutoAgrupamento
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread.access$600(ActivityThread.java:123)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Looper.loop(Looper.java:137)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:4424)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:511)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime Caused by: java.lang.ClassCastException: projetoTeste.dto.Periodo cannot be cast to projetoTeste.dto.ProdutoAgrupamento
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.dto.Venda.readFromParcel(Venda.java:343)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.dto.Venda.<init>(Venda.java:69)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.dto.Venda.<init>(Venda.java:12)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.dto.Venda$1.createFromParcel(Venda.java:349)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.dto.Venda$1.createFromParcel(Venda.java:347)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Parcel.readParcelable(Parcel.java:1992)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Parcel.readValue(Parcel.java:1854)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Parcel.readMapInternal(Parcel.java:2094)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Bundle.unparcel(Bundle.java:223)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.os.Bundle.getParcelable(Bundle.java:1158)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at projetoTeste.controle.Activity_VendaProduto.onCreate(Activity_VendaProduto.java:79)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.Activity.performCreate(Activity.java:4465)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
12:20:22.493 526 projetoTeste ERROR AndroidRuntime ... 11 more
Итак, я пришел сюда просить света, я пытался и пытался, и не могу понять, где и почему эта ошибка все еще возникает.
Заранее спасибо!
--- ОБНОВИТЬ ---
Решено, я выполнил шаги ответа, исправил некоторые преобразования/запись/чтение в списках и массивах, и теперь все работает нормально! Спасибо!