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

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

Восстановить пароль Регистрация
 
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 21
17.03.2016, 22:39     Коллекция из parcelable объектов передается в активити с вызовом исключения #1
Суть в том, что в одной активити я создаю коллекцию из объектов. Но это не просто коллекция, там есть объекты и их наследники, приведенные к одному родительскому типу.

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

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

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

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

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

Как исправить эту проблему и что это значит?
Заранее спасибо, всем кто поможет, или не поможет а прочтет...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2016, 22:39     Коллекция из parcelable объектов передается в активити с вызовом исключения
Посмотрите здесь:

Android Активити
Перед вызовом активити, вызвать DatePickerDialog Android
Android Вызов активити
Запуск активити Android
Android Второй активити
Android Смена активити
Из Активити в Фрагмент Android
Активити и фрагмент Android
Android Абстрактная активити
Адаптивность Активити Android
Android Пересоздание активити
Android Не передается POST запрос

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
18.03.2016, 14:49     Коллекция из parcelable объектов передается в активити с вызовом исключения #2
чуть в том, что много букв и ни строчки кода - ни классов ни лога ошибки
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 21
19.03.2016, 18:18  [ТС]     Коллекция из parcelable объектов передается в активити с вызовом исключения #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)*
Паблито
не спать!
1881 / 1615 / 500
Регистрация: 12.05.2014
Сообщений: 5,831
Завершенные тесты: 1
19.03.2016, 18:21     Коллекция из parcelable объектов передается в активити с вызовом исключения #4
я думаю класс Car надо сделать public и проверить еще раз
Benderbej
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 21
20.03.2016, 01:09  [ТС]     Коллекция из parcelable объектов передается в активити с вызовом исключения #5
да нет, не помогло=(. Странно, что с передачей данных проблем нет. Данные передаются, а исключение почему то выкидывает всегда, как бы я parcelable не конфигурировал. Почти все случаи о которых читал на stackoverflow, говорят о том, что такая ошибка может повляться когда неправильно определен ClassLoader. пытался я и его явно прописать, через getClassloader, ничего у меня из этого не вышло.
Yandex
Объявления
20.03.2016, 01:09     Коллекция из parcelable объектов передается в активити с вызовом исключения
Ответ Создать тему
Опции темы

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