ClassNotFoundException при десериализации сериализуемого объекта через Intent из Android - PullRequest
0 голосов
/ 23 октября 2018

У меня есть два приложения Android A и B. Для приложения A. У меня есть сериализуемый объект

public class MyObject implements Serializable {
public String[] var1;
public ArrayList<Integer> var2;

public MyObject (String[] var1, ArrayList<Integer> var2) {
    this.var1= var1;
    this.var2= var2;
}

Затем я отправляю экземпляр этого класса через Intent другому действию в приложении B, используя

Intent i= new Intent("appB.component");
i.putExtra("myobject", fc);
startActivity(i);

В приложении B я создаю тот же класс Serializable в приложении A. Я пытаюсь получить это, но у меня есть java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = appA.MyObject )

Bundle b = getIntent().getExtras();               
MyObject o = (MyObject) b.getSerializable("myobject");

У нас есть способ изменитьссылка класса в приложении A на приложение B или ручной способ анализа этого объекта, пока не измените код в приложении A.

1 Ответ

0 голосов
/ 23 октября 2018

Ну appA.MyObject и appB.MyObject - это не один класс.Один не может быть десериализован в другой.

Лучше использовать GSON или подобную ему библиотеку для сериализации вашего appA.MyObject класса в JSON, отправить полученную строку через Intent и затем десериализоватьJSON String обратно в класс appB.MyObject.

В качестве альтернативы вы можете попробовать указать оба поля: appA.MyObject и appB.MyObject a

private static final long serialVersionUID

и установить оба идентификатора UID на одно и то же значение.,Но я не уверен, что это сработает.

Несколько советов из Сериализуемой документации Android :

Внедряйте Сериализуемую в рассудительность

Обратитесь к главе «Эффективная Java» по сериализации, чтобы подробно ознакомиться с API сериализации.В книге объясняется, как использовать этот интерфейс без ущерба для удобства обслуживания вашего приложения.

Рекомендуемые альтернативы

JSON лаконичен, удобочитаем и эффективен.Android включает в себя как потоковый API, так и древовидный API для чтения и записи JSON.Используйте библиотеку привязок, такую ​​как GSON, для непосредственного чтения и записи объектов Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...