Parcelable: класс не найден при отмене сортировки при вызове из другого приложения - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь передать пакет из App1 с некоторыми данными, класс данных которых является Auxiliar для App2, который также определил класс данных Auxiliar, но я получаю следующую ошибку:

E/Parcel: Class not found when unmarshalling: com.opp.App1.ui.main.Auxiliar

Я думаю, что App2 пытается найти определение Auxiliar при получении информации о пакете, и я не знаю, как сказать, использовать Auxiliar, определенный в App2

Вот код

@Parcelize
data class Auxiliar(
    var nightId: Long = 0L,

    val startTimeMilli: Long = System.currentTimeMillis(),

    var endTimeMilli: Long = startTimeMilli,

    var quality: Int = -1
): Parcelable

Приложение 1

var intent: Intent? = activity?.packageManager?.getLaunchIntentForPackage("com.opp.App2")

val argu1 = Auxiliar(-101, 1,1,-1)
if (intent != null) {
            var bundle = Bundle()
            bundle.putParcelable("una", argu1)
            intent.putExtra("myBundle",bundle)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            startActivity(intent)
}

Получить в приложении 2:


val bundle = activity?.intent?.getBundleExtra("myBundle")
if (bundle != null) {
    var una = bundle.getParcelable<Auxiliar>("una")
    }

1 Ответ

0 голосов
/ 11 января 2020

Вы не можете передать доступный класс из одного приложения в другое?

Да, вы можете. Однако они должны быть того же класса . Другими словами, они должны иметь:

  • То же базовое имя (Auxiliar)
  • То же имя пакета (com.opp.App1.ui.main)
  • То же поля

В вашем случае, я предполагаю, что имя пакета отличается. Если вы используете одно и то же имя пакета в обоих приложениях (например, если оба приложения используют общий библиотечный модуль, который определяет класс), вы будете в несколько лучшем состоянии.

Однако имейте в виду, что пользователи этого не делают. Необходимо обновить App1 и App2 одновременно. Parcelable предназначен для использования классами инфраструктуры, которые являются частью встроенного программного обеспечения, где App1 и App2 гарантированно имеют одинаковую реализацию. Если у App1 есть старый Auxiliar, а у App2 новый Auxiliar, у вас могут возникнуть проблемы.

Вы можете пропускать только примитивные классы?

Передача всего, что определено в Android SDK как Parcelable, является безопасным, поскольку App1 и App2 будут иметь одинаковое определение класса для этих классов. Так, например, Bundle - это Parcelable. Вам все еще нужна система управления версиями, чтобы справляться с изменениями данных, но, по крайней мере, вы контролируете, как с этим справиться.

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