Ив искали здесь поиски решения, но я не могу его найти. У меня есть активность, кто отправляет объект через действия. Но, когда начинается «readParcelable», после нескольких объектов появляется CastExceptionError, Ive отлаживает несколько раз этот код, пытается заменить объекты, объекты комментариев, ничего не работает. Здесь код: Все классы реализуют методы Parcelable, writeToParcel, readFromParcel и CREATOR.ClassCastException - Исходные объекты/Пользовательский объект
@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 этого "Венд" объект:
@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 (ive проверен несколько раз на порядок элементов при записи и этот метод)
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());
Ive попытался прокомментировать, заменить, но ошибка повторяется на соседних объектах.
Logcat:
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
Итак, я пришел сюда, чтобы просить свет, ив пытался и пытался и не может видеть, где и почему эта ошибка возникает.
Заранее благодарен!
--- UPDATE ---
решаемые, ив следовали этапы ответа, исправлены некоторые преобразования/записи/чтения в списках и массивах и Everythings выглядит отлично работает сейчас! Спасибо!
Попробуйте заменить все аргументы getClassLoader() равными нулю, например. tipoContratoVenda = in.readParcelable (null); для всех Parcelable объектов. –
Каков тип периодовInstalacao и produtoAgrupamento? – mromer
produtoAgrupamento - объект ProdutoAgrupamento и periodoInstalacao a Periodo class (оба реализуют Parcelable и методы, но внутри класса ProdutoAgrupamento у меня есть: «частный ProdutoTipo [] tipoProdutoLista;» этот список, не знаю, является ли этот парень причиной этой ошибки, я не знаю думаю, так, потому что даже когда я комментирую produtoAgrupamento, ошибка заливки по-прежнему происходит с объектом-соседкой по методу чтения. – krustbr