Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 23
#1

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

17.03.2016, 22:39. Просмотров 312. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2016, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Коллекция из parcelable объектов передается в активити с вызовом исключения (Программирование Android):

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

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

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

Вызов новой активити не из класса активити - Программирование Android
Есть 4 класса: 1) WelcomeActivity; 2) MainActivity; 3) PopUpActivity; 4) Client. Программа работает с сервером и получает...

Отображение активити поверх другого активити - Программирование Android
Ребят подскажите пожалуйста как такое сделать. Есть активити с картой, по нажатию кнопки настройки, нужно открыть активити с настройками,...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2485 / 1930 / 602
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
18.03.2016, 14:49 #2
чуть в том, что много букв и ни строчки кода - ни классов ни лога ошибки
0
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 23
19.03.2016, 18:18  [ТС] #3
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
Pablito
2485 / 1930 / 602
Регистрация: 12.05.2014
Сообщений: 6,782
Завершенные тесты: 1
19.03.2016, 18:21 #4
я думаю класс Car надо сделать public и проверить еще раз
0
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 23
20.03.2016, 01:09  [ТС] #5
да нет, не помогло=(. Странно, что с передачей данных проблем нет. Данные передаются, а исключение почему то выкидывает всегда, как бы я parcelable не конфигурировал. Почти все случаи о которых читал на stackoverflow, говорят о том, что такая ошибка может повляться когда неправильно определен ClassLoader. пытался я и его явно прописать, через getClassloader, ничего у меня из этого не вышло.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2016, 01:09
Привет! Вот еще темы с ответами:

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

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

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

Коллекция "Склад", включающий до 20 объектов класса "Товар": нарисовать график статистического учета - C#
Добрый день,уважаемые программисты. Задача: В коллекции «Склада», включающей до 20 объектов класса «Товар», предусмотреть подсчет...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.03.2016, 01:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru