对于RegExp

时间:2015-11-18 09:36:33

标签: android regex gson retrofit

我在我的应用程序中使用Retrofit 2.0和GSON转换器。

在我的JSON中,我有6个字段,3个用于int和String,其中3个由RegExps组成(1个int用于" id"以及5个String字段在模型类中)。

对String和int fiends进行了很好的解析,但在使用RegExp的字段上,GSON返回NULL。

以下是JSON的例子:

[
   {
     "id": "22",
     "iso": "TTR",
     "name": "Lolo",
     "check": "^77",
     "full": "^77[0-9]{9}$",
     "default": "+77"
   },
   {
     "id": "23",
     "iso": "RTT",
     "name": "Polo",
     "check": "^7",
     "full": "^7[0-6,8,9][0-9]{9}$",
     "default": "+7"
   }
]

和片段中的代码:

Retrofit retrofit = new Retrofit.Builder()
         .baseUrl(URL_API)
         .client(SSLSuppressClient.trustcert())
         .addConverterFactory(GsonConverterFactory.create())
         .build();
GetPhones getPhonesInfo = retrofit.create(GetPhones.class);
Call<ArrayList<GetPhones> call = getPhonesInfo.getPhones();
call.enqueue(new Callback<ArrayList<GetPhones>>() {
    @Override
    public void onResponse(Response<ArrayList<GetPhones>> response, Retrofit retrofit) {
        Toast.makeText(getActivity(), "Success!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onFailure(Throwable t) {
        Toast.makeText(getActivity(), "Failure!", Toast.LENGTH_SHORT).show();
        Log.d("LOG", t.getMessage());
                }
    });

和模型类:

public class GetPhones {
    int id;
    String iso;
    String name;
    String lop_check;
    String lop_full;
    String lop_default;
}

问题是什么?

2 个答案:

答案 0 :(得分:2)

您应该在String full中声明字段GetPhones,或者如果您想为其使用其他名称,则必须使用注释@SerializedName。 E.g。

@SerializedName("default")
String lop_default;

在这种情况下,Gson将使用full作为解析json的密钥。通常,这适用于要解析的每个字段。否则,您将始终获得null / default值

答案 1 :(得分:1)

它将返回null,因为Retrofit无法找到phone_ftm_check变量的映射。

您需要在变量声明中添加@SerializedName(&#34; check&#34;)注释。

所以你的POJO课程应如下所示:

public class GetPhones {
    int id;
    String iso;
    String name;
    @SerializedName("check")
    String phone_ftm_check;
    @SerializedName("full")
    String phone_ftm_full;
    @SerializedName("default")
    String phone_ftm_default;
}

试试这个POJO课程。它会起作用。