Как я могу начать другое действие с объектами класса putextra? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу начать другое действие с некоторым установленным объектом класса, таким как NavigationViewOptions .

Мой код:

 public NavigationViewOptions options;

 options=NavigationViewOptions.builder()
                    .directionsRoute(currentRoute)
                    .shouldSimulateRoute(false)
                    .navigationListener(MainActivity.this)
                    .build();

            Intent navigationActivity=new Intent(MainActivity.this,NavigationActivity.class);
            navigationActivity.putExtra("navigationOptions", options); startActivity(navigationActivity);

И что я получил ошибку сборки "нет подходящего метода для putextra"

Тогда я попробовал (Parselable) опции или (Сериализуемые) опции как показано ниже

navigationActivity.putExtra("navigationOptions", (Parcelable) options);

navigationActivity.putExtra("navigationOptions", (Serializable) options);

Я получил успешную сборку. Но когда я запускал приложение на устройстве, у меня были ошибки

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mapbox_document, PID: 18374
java.lang.ClassCastException: com.mapbox.services.android.navigation.ui.v5.AutoValue_NavigationViewOptions cannot be cast to android.os.Parcelable
    at com.example.mapbox_document.MainActivity$1.onClick(MainActivity.java:236)
    at android.view.View.performClick(View.java:7346)
    at android.widget.TextView.performClick(TextView.java:14275)
    at android.view.View.performClickInternal(View.java:7312)
    at android.view.View.access$3200(View.java:846)
    at android.view.View$PerformClick.run(View.java:27794)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7100)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

Я пытался добавить разрабатываемый метод к классам расширения mainacctivity, но мне не удалось.

Какому методу я должен следовать?

1 Ответ

0 голосов
/ 20 апреля 2020

Для передачи не примитивных типов через намерение между действиями у вас есть 2 варианта:

Сделать объект пригодным для продажи или сделать его сериализуемым .

Для того, чтобы он был доступен для посылки (из него может быть создана посылка), класс NavigationViewOptions должен был бы реализовать интерфейс Parcelable.

Для того, чтобы он был сериализуемым (конвертируемым из и в поток байтов) ) класс NavigationViewOptions должен был бы реализовать интерфейс Serializable.

Для справки посмотрите здесь: https://www.techjini.com/blog/passing-objects-via-intent-in-android/

Проверяя реализацию NavigationViewOptions, я не могу найти реализация ни сериализуемого, ни разборного интерфейса. Поэтому передача объекта NavigationViewOptions через намерение не является простой задачей.

Рекомендация:

Я бы порекомендовал вам передавать примитивные объекты, которые вы используете для создания объекта NavigationViewOptions с, вместо того, чтобы передать сам объект. Объект маршрута может быть передан через намерение, поскольку вы можете преобразовать его в String. Другой объект является логическим. Так что это будет работать.

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