Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 26

Коллекция из parcelable объектов передается в активити с вызовом исключения

17.03.2016, 22:39. Показов 1741. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть в том, что в одной активити я создаю коллекцию из объектов. Но это не просто коллекция, там есть объекты и их наследники, приведенные к одному родительскому типу.

Грубо говоря, коллекция состоит из элементов A и B, причем B extends A
Эту коллекцию, я кладу в Bundle и передаю через Intent.

При этом, для класса A имплементирую интерфейс Parcelable, со всеми необходимыми методами, также, я создаю реализации всех этих методов и в классе наследнике B.

В итоге, код работет как надо, в целевой активити я ловлю и разбираю коллекцию, но в логах выскакивает следующее исключение:

Parcel: Class not found when unmarshalling: mypackage.B ... java.lang.ClassNotFoundException

(работаю в Android Studio, сразу тестирую на устройстве)

Как исправить эту проблему и что это значит?
Заранее спасибо, всем кто поможет, или не поможет а прочтет...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2016, 22:39
Ответы с готовыми решениями:

Перед вызовом активити, вызвать DatePickerDialog
Всем Здравствуйте! У меня есть button, который вызывает активити, надо на это button повесить еще вызов DatePickerDialog и потом...

Коллекция объектов моего класса
Привет :) Я только начал изучение PHP, поэтому просьба не кидаться в меня камнями. Я создал свой класс, и теперь мне надо...

Коллекция объектов типа int
Необходимо создать в проекте Lab16_Фамилия коллекцию mas1, содержащую список объектов типа int. Добавить в коллекцию три ...

4
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.03.2016, 14:49
чуть в том, что много букв и ни строчки кода - ни классов ни лога ошибки
0
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 26
19.03.2016, 18:18  [ТС]
Activity отправки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.mypack.myparcels;
 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.content.DialogInterface.OnClickListener;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener  {
 
    public static final String LOG_TAG = "main activity";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
        Button btnOk;
        btnOk = (Button) findViewById(R.id.buttonOk);
        btnOk.setOnClickListener(this);
 
 
    }
        @Override
        public void onClick (View v){
 
            switch (v.getId()) {
                // Все записи
                case R.id.buttonOk:
 
                    ArrayList carList = new ArrayList();
                    carList.add(new Car('1',"Honda","Black"));
                    carList.add(new Car('2',"Toyota","Blue"));
                    carList.add(new Car('3',"Suzuki","Green"));
                    Intent i = new Intent(getApplicationContext(), CarDetailActivity.class);
                    i.putParcelableArrayListExtra("cars", carList);
                    this.startActivity(i);
 
                    Log.d(LOG_TAG, "--- Car:click ---");
                    break;
            }
        }
    }

Activity принимающее
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.mypack.myparcels;
 
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
 
import java.util.ArrayList;
 
public class CarDetailActivity extends AppCompatActivity {
 
    public static final String LOG_TAG = "CarDetailActivity";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_car_detail);
 
        Intent i = this.getIntent();
        ArrayList<Car> carList =  i.getParcelableArrayListExtra("cars");
 
        Car own= carList.get(0);
        String br = own.brand;
        String cr = own.color;
 
        Log.d(LOG_TAG, "--- CARLIST ---" + br + "  "+ cr);
 
 
    }
}
Сам parcel
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.mypack.myparcels;
 
import android.os.Parcel;
import android.os.Parcelable;
 
 
class Car implements Parcelable {
    public int regId;
    public String brand;
    public String color;
 
    public Car(Parcel source) {
        regId = source.readInt();
        brand = source.readString();
        color = source.readString();
    }
 
    public Car(int regId, String brand, String color) {
        this.regId = regId;
        this.brand = brand;
        this.color = color;
    }
 
    public int describeContents() {
        return this.hashCode();
    }
 
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(regId);
        dest.writeString(brand);
        dest.writeString(color);
    }
 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public Car createFromParcel(Parcel in) {
            return new Car(in);
        }
 
        public Car[] newArray(int size) {
            return new Car[size];
        }
    };
 
}
исключение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
03-19 18:05:47.676 1018-1841/? E/Parcel: Class not found when unmarshalling: com.mypack.myparcels.Car
                                         java.lang.ClassNotFoundException: com.mypack.myparcels.Car
                                             at java.lang.Class.classForName(Native Method)
                                             at java.lang.Class.forName(Class.java:251)
                                             at java.lang.Class.forName(Class.java:216)
                                             at android.os.Parcel.readParcelableCreator(Parcel.java:2133)
                                             at android.os.Parcel.readParcelable(Parcel.java:2097)
                                             at android.os.Parcel.readValue(Parcel.java:2013)
                                             at android.os.Parcel.readListInternal(Parcel.java:2343)
                                             at android.os.Parcel.readArrayList(Parcel.java:1703)
                                             at android.os.Parcel.readValue(Parcel.java:2034)
                                             at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
                                             at android.os.Bundle.unparcel(Bundle.java:249)
                                             at android.os.Bundle.getString(Bundle.java:1118)
                                             at android.content.Intent.getStringExtra(Intent.java:5151)
                                             at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)
                                             at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)
                                             at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4139)
                                             at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4037)
                                             at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)
                                             at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2713)
                                             at android.os.Binder.execTransact(Binder.java:404)
                                             at dalvik.system.NativeStart.run(Native Method)
                                          Caused by: java.lang.NoClassDefFoundError: com/mypack/myparcels/Car
                                             at java.lang.Class.classForName(Native Method)*
                                             at java.lang.Class.forName(Class.java:251)*
                                             at java.lang.Class.forName(Class.java:216)*
                                             at android.os.Parcel.readParcelableCreator(Parcel.java:2133)*
                                             at android.os.Parcel.readParcelable(Parcel.java:2097)*
                                             at android.os.Parcel.readValue(Parcel.java:2013)*
                                             at android.os.Parcel.readListInternal(Parcel.java:2343)*
                                             at android.os.Parcel.readArrayList(Parcel.java:1703)*
                                             at android.os.Parcel.readValue(Parcel.java:2034)*
                                             at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)*
                                             at android.os.Bundle.unparcel(Bundle.java:249)*
                                             at android.os.Bundle.getString(Bundle.java:1118)*
                                             at android.content.Intent.getStringExtra(Intent.java:5151)*
                                             at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)*
                                             at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)*
                                             at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4139)*
                                             at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4037)*
                                             at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)*
                                             at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2713)*
                                             at android.os.Binder.execTransact(Binder.java:404)*
                                             at dalvik.system.NativeStart.run(Native Method)*
                                          Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mypack.myparcels.Car" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
                                             at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
                                             at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
                                             at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
                                             at java.lang.Class.classForName(Native Method)*
                                             at java.lang.Class.forName(Class.java:251)*
                                             at java.lang.Class.forName(Class.java:216)*
                                             at android.os.Parcel.readParcelableCreator(Parcel.java:2133)*
                                             at android.os.Parcel.readParcelable(Parcel.java:2097)*
                                             at android.os.Parcel.readValue(Parcel.java:2013)*
                                             at android.os.Parcel.readListInternal(Parcel.java:2343)*
                                             at android.os.Parcel.readArrayList(Parcel.java:1703)*
                                             at android.os.Parcel.readValue(Parcel.java:2034)*
                                             at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)*
                                             at android.os.Bundle.unparcel(Bundle.java:249)*
                                             at android.os.Bundle.getString(Bundle.java:1118)*
                                             at android.content.Intent.getStringExtra(Intent.java:5151)*
                                             at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1467)*
                                             at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1063)*
                                             at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:4139)*
                                             at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:4037)*
                                             at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:159)*
                                             at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2713)*
                                             at android.os.Binder.execTransact(Binder.java:404)*
                                             at dalvik.system.NativeStart.run(Native Method)*
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.03.2016, 18:21
я думаю класс Car надо сделать public и проверить еще раз
0
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 26
20.03.2016, 01:09  [ТС]
да нет, не помогло=(. Странно, что с передачей данных проблем нет. Данные передаются, а исключение почему то выкидывает всегда, как бы я parcelable не конфигурировал. Почти все случаи о которых читал на stackoverflow, говорят о том, что такая ошибка может повляться когда неправильно определен ClassLoader. пытался я и его явно прописать, через getClassloader, ничего у меня из этого не вышло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2016, 01:09
Помогаю со студенческими работами здесь

Коллекция для объектов разного типа
Помогите кто-нибудь определить коллекцию. Нужна коллекция, которая была бы способна хранить объекты разного типа (но с общим...

Абстрактный базовый класс, коллекция объектов, прогрессия
Описать абстрактный базовый класс и производные от него и создать параметризованную коллекцию объектов производных классов. Используя...

На телефоне highscreen 3 на всех активити происходит быстрый самовозврат к главной активити
Сделал меню в виде ListView. При клике на меню запускаются активити. На эмуляторе работает, на телефоне моем LG все работает. На телефоне...

Как вызвать метод в активити классе из обычного не активити класса?
Есть активити в котором вводятся логин и пароль. При нажатии кнопки &quot;войти&quot; в отдельном классе &quot;сокетсервер&quot;(+в отдельном потоке)...

Изменение параметров активити из другого активити
Как сделать так чтобы из первого активити поменять final ImageView img=(ImageView)findViewById(R.id.image1); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru