小编Jor*_*uci的帖子

使用Gson抛出异常反序列化多态JSON

我正在开发一个使用Gson作为JSON反序列化器的应用程序,需要从REST API反序列化多态JSON.在解释mi问题之前,我已经一直在寻找Gson的多态反序列化,并在几个案例中成功实现了它.所以这是我遇到的一个具体问题.在问这个问题之前,我已经阅读了这篇精彩文章Stack Overflow讨论.我正在使用RuntimeTypeAdapterFactory顺序反序列化多态对象.

我遇到的问题是,显然GSON RuntimeTypeAdapterFactory不允许声明指定层次结构内部对象类型的字段.我将用一些代码进一步解释.我有以下pojos结构(pojos为了简单起见已被减少):

public abstract class BaseUser {
    @Expose
    protected EnumMobileUserType userType; 
}


public class User extends BaseUser {
    @Expose
    private String name;
    @Expose
    private String email;     
}

public class RegularUser extends User {
    @Expose
    private String address;    
}

public class SpecialUser extends User {
    @Expose
    private String promoCode;
}
Run Code Online (Sandbox Code Playgroud)

现在这是我RuntimeTypeAdapterFactory为用户层次结构定义的代码.

public static RuntimeTypeAdapterFactory<BaseUser> getUserTypeAdapter() {
   return RuntimeTypeAdapterFactory
        .of(BaseUser.class, "userType")
        .registerSubtype(User.class, EnumMobileUserType.USER.toString())
        .registerSubtype(RegularUser.class, EnumMobileUserType.REGULAR.toString())
        .registerSubtype(SpecialUser.class, …
Run Code Online (Sandbox Code Playgroud)

java android json gson

13
推荐指数
1
解决办法
1438
查看次数

意外的telephonyManager.getSimCountryIso()行为

我正在创建一个应用程序,该应用程序将根据您的移动网络提供商所在的国家/地区显示该国家/地区的所有替代移动网络提供商的列表。为此,我正在使用telephonyManager.getSimCountryIso()检索国家/地区代码。

官方的android开发人员文档说:“返回与SIM卡提供商的国家/地区代码等效的ISO国家/地区代码”,因此从此我希望国家/地区代码始终始终与设备位置无关。但这不是它实际的工作方式! 例如,我最近遇到这种情况:我有一个带有西班牙SIM卡的android设备,属于西班牙网络提供商。因此,如果我在西班牙,TelephonyManager.getSimCountryIso()将返回“ es”。一切正常。问题例如,当我去法国旅行时,我调试了应用程序,发现telephonyManager.getSimCountryIso()返回的国家代码为:“ nl”(来自荷兰! 。与西班牙使用的设备和SIM卡相同,因此国家/地区代码ISO仍应为“ es”。

我的问题是这种方法实际上如何工作?如果我使用西班牙SIM卡,为什么会收到国家代码“ nl”(荷兰)?

预先感谢您的任何帮助

android localization

6
推荐指数
1
解决办法
2568
查看次数

标签 统计

android ×2

gson ×1

java ×1

json ×1

localization ×1