2016-12-20 3 views
4

インテントバンドルの中にシリアライズ可能なものを渡そうとすると、この致命的な例外が発生します。実装しようとしているノーガットショートカットに関連していると思います。ここ例外:ノーガットバージョンのショートカット

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=***.****.******[email protected] 
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; 
    } 
} 

ここで私は意図を作成したコード:

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; 
} 

誰かがnougatショートカットにシリアライズ可能なものを渡すことは許されていないのですか?

答えて

8

PersistableBundleクラスのチェックには、以下の方法でコンテンツです:

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[]); 
} 

だから、残念ながら唯一のこれらのクラスは、ショートカットのためのテントにバンドルすることができます。

出典:PersistableBundle.java

関連する問題