Shortcuts for Nougat version

匿名 (未验证) 提交于 2019-12-03 08:44:33

问题:

I'm catching this fatal exception when I try to pass an Serializable inside an Intent bundle, and I think is related with the nougat shortcuts that I'm trying to implement. here the exception:

12-16 16:17:32.972 20461-20461/***.****.******.debug E/AndroidRuntime: FATAL EXCEPTION: main Process: ***.****.******.debug, PID: 20461 java.lang.IllegalArgumentException: Bad value in PersistableBundle key=shortcutId value=***.****.******.common.cta.CtaAccountSectionModel@1fb70dc at android.os.PersistableBundle.<init>(PersistableBundle.java:124) at android.os.PersistableBundle.<init>(PersistableBundle.java:98) at android.content.pm.ShortcutInfo.fixUpIntentExtras(ShortcutInfo.java:267) at android.content.pm.ShortcutInfo.<init>(ShortcutInfo.java:245)  at android.content.pm.ShortcutInfo.<init>(ShortcutInfo.java)  at android.content.pm.ShortcutInfo$Builder.build(ShortcutInfo.java:1027)  at ****.******.***.ShortcutHelper.createShortcut(ShortcutHelper.java:79)  at ****.******.***.ShortcutHelper.refreshShortcuts(ShortcutHelper.java:87)  at ****.******.***.****.******.***.refreshShortcuts(Application.java:93)  at ****.******.***.refreshShortcuts(SettingActivity.java:247)  at ****.******.***.storeShortcuts(SettingActivity.java:242)  at c****.******.***.access$800(SettingActivity.java:56)  at ****.******.***.SettingActivity$2.onClick(SettingActivity.java:233)  at android.view.View.performClick(View.java:5637)  at android.view.View$PerformClick.run(View.java:22429)  at android.os.Handler.handleCallback(Handler.java:751)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6119)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

CtaAccountSectionModel.class

public class CtaAccountSectionModel extends CtaModel implements Serializable         { } 

CtaModel.class

@JsonTypeInfo(             use = JsonTypeInfo.Id.NAME,             include = JsonTypeInfo.As.PROPERTY,             defaultImpl = CtaDefaultModel.class,             property = "action", visible = true)     @JsonSubTypes({             @JsonSubTypes.Type(value = CtaProductPageModel.class, name = CtaActionModel.ACTION_PRODUCT_PAGE))})   public class CtaModel implements Serializable {    private String action;    private String name;     public String getAction() {         return action;     }      public void setAction(String action) {         this.action = action;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     } } 

Here the code here I created the intent:

public ShortcutBackStackBuilder getHistoryWithBackStack(String section) {     Intent intent = IntentAppFactory.createMainActivityFromShortcut(mContext).putExtra(IntentExtraConstants.EXTRA_SHORTCUT_ID, new CtaAccountSectionModel(section))         .setAction(Intent.ACTION_MAIN);          mIntentLinkedList.add(intent);         return this; } 

Anyone knows if it's not allowed to pass a Serializable in the nougat shortcuts?

回答1:

The PersistableBundle class checks it's content with the following method:

public static boolean isValidType(Object value) {     return (value instanceof Integer) || (value instanceof Long) ||             (value instanceof Double) || (value instanceof String) ||             (value instanceof int[]) || (value instanceof long[]) ||             (value instanceof double[]) || (value instanceof String[]) ||             (value instanceof PersistableBundle) || (value == null) ||             (value instanceof Boolean) || (value instanceof boolean[]); } 

So unfortunately only these classes can be bundled into the Intent for Shortcuts.

source: PersistableBundle.java



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!