如何使用 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 个选项:
使对象 parcelable 或 serializable.
为了使其可打包(可以从中创建包裹),NavigationViewOptions class 必须实现 Parcelable 接口。
为了使其可序列化(可从字节流转换到字节流),NavigationViewOptions class 必须实现可序列化接口。
参考看这里:https://www.techjini.com/blog/passing-objects-via-intent-in-android/
检查 NavigationViewOptions 的实现,我找不到 serializable 和 parcelable 接口的实现。因此,通过意图传递 NavigationViewOptions 对象并不简单。
建议:
我建议您传递用于构建 NavigationViewOptions 对象的原始对象,而不是传递对象本身。路由对象可以通过意图传递,因为您可以将其转换为字符串。另一个对象是布尔值。所以这会起作用。
我想用一些集合 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 个选项:
使对象 parcelable 或 serializable.
为了使其可打包(可以从中创建包裹),NavigationViewOptions class 必须实现 Parcelable 接口。
为了使其可序列化(可从字节流转换到字节流),NavigationViewOptions class 必须实现可序列化接口。
参考看这里:https://www.techjini.com/blog/passing-objects-via-intent-in-android/
检查 NavigationViewOptions 的实现,我找不到 serializable 和 parcelable 接口的实现。因此,通过意图传递 NavigationViewOptions 对象并不简单。
建议:
我建议您传递用于构建 NavigationViewOptions 对象的原始对象,而不是传递对象本身。路由对象可以通过意图传递,因为您可以将其转换为字符串。另一个对象是布尔值。所以这会起作用。