如何使用 putextra class 对象启动另一个 activity?

How can I start another activity with putextra class objects?

我想用一些集合 class 对象开始另一个 activity,例如 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);

以及我得到的构建错误 "no suitable method for putextra"

然后我尝试了 (Parselable)options(Serializable)options 如下所示

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.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.access00(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)

我试图将 parcelable 方法添加到 mainactivity class extends 但我失败了。

我必须遵循什么方法?

要通过活动之间的意图传递非原始类型,您有 2 个选项:

使对象 parcelableserializable.

为了使其可打包(可以从中创建包裹),NavigationViewOptions class 必须实现 Parcelable 接口。

为了使其可序列化(可从字节流转换到字节流),NavigationViewOptions class 必须实现可序列化接口。

参考看这里:https://www.techjini.com/blog/passing-objects-via-intent-in-android/

检查 NavigationViewOptions 的实现,我找不到 serializable 和 parcelable 接口的实现。因此,通过意图传递 NavigationViewOptions 对象并不简单。

建议:

我建议您传递用于构建 NavigationViewOptions 对象的原始对象,而不是传递对象本身。路由对象可以通过意图传递,因为您可以将其转换为字符串。另一个对象是布尔值。所以这会起作用。