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

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

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

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

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

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

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

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

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

Как исправить эту проблему и что это значит?
Заранее спасибо, всем кто поможет, или не поможет а прочтет...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2016, 22:39
Ответы с готовыми решениями:

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

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

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

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

4
2870 / 2282 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.03.2016, 14:49 2
чуть в том, что много букв и ни строчки кода - ни классов ни лога ошибки
0
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 26
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
2870 / 2282 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.03.2016, 18:21 4
я думаю класс Car надо сделать public и проверить еще раз
0
1 / 1 / 0
Регистрация: 05.06.2013
Сообщений: 26
20.03.2016, 01:09  [ТС] 5
да нет, не помогло=(. Странно, что с передачей данных проблем нет. Данные передаются, а исключение почему то выкидывает всегда, как бы я parcelable не конфигурировал. Почти все случаи о которых читал на stackoverflow, говорят о том, что такая ошибка может повляться когда неправильно определен ClassLoader. пытался я и его явно прописать, через getClassloader, ничего у меня из этого не вышло.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2016, 01:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Изменение параметров активити из другого активити
Как сделать так чтобы из первого активити поменять final ImageView...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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