android field 类型,Gradle buildConfigField 使用Hashmap ArrayList 等类型

buildConfigField可以在gradle脚本中定义我们需要的变量,然后在代码中引用。

官方文档上buildConfigField 定义的格式是这样的:

void buildConfigField(String type, String name, String value)

我们可以很方便的定义基础类型,如type为Long String int boolean等基础类型,但是我们能不能定义数组,Hashmap,ArrayList等java常用的数据结构呢?

答案是可以的,我们可以定义任何我们想要的对象。

如我们可以定义字符串数组:

buildConfigField "String[]", "ARRAY",

"{" +

"\"test1\"," +

"\"test2\"," +

"\"test3\"" +

"}"

和Map类型:

buildConfigField "java.util.Map", "NAME_MAP",

"new java.util.HashMap

"String>() {{ put(\"name\", \"John\"); put(\"name1\", \"daniel\"); put(\"name2\", " +

"\"anna\"); }}"

测试下,build.gradle中定义如下:

//string 类型需要引号包括

buildConfigField "String", "CHANNEL_KEY", "\"APP_CHANNEL\""

buildConfigField "String[]", "ARRAY",

"{" +

"\"test1\"," +

"\"test2\"," +

"\"test3\"" +

"}"

buildConfigField "java.util.Map", "NAME_MAP",

"new java.util.HashMap

"String>() {{ put(\"name\", \"John\"); put(\"name1\", \"daniel\"); put(\"name2\", " +

"\"anna\"); }}"

buildConfigField "java.util.ArrayList", "NAME_ARRAYLIST",

"new java.util.ArrayList() {{ add(\"John\"); add( \"daniel\"); add(\"anna\"); }}"

build后生成的BuildConfig文件如下:

/**

- Automatically generated file. DO NOT MODIFY

*/

package com.wxkly.aroutertest;

public final class BuildConfig {

// Fields from default config.

public static final String[] ARRAY = {"test1","test2","test3"};

public static final String CHANNEL_KEY = "APP_CHANNEL";

public static final java.util.ArrayList NAME_ARRAYLIST = new java.util.ArrayList() {{ add("John"); add( "daniel"); add("anna"); }};

public static final java.util.Map NAME_MAP = new java.util.HashMap() {{ put("name", "John"); put("name1", "daniel"); put("name2", "anna"); }};

public static final boolean isBuild = false;

public static final int size = 0;

}

可以看到生成了相应的java.util.ArrayList,java.util.Map。

这里需要注意的是buildConfig文件中无法使用import引入相关的包名,所有我们在定义buildConfigField的时候需要使用类名加package路径如:java.util.Map 。

1. 导入fastjson库:可以通过Maven或Gradle进行导入,也可以将fastjson.jar文件手动添加到项目中。 2. 序列化对象:将Java对象转换为json字符串。 ```java Person person = new Person(); person.setName("Jack"); person.setAge(20); String jsonString = JSON.toJSONString(person); ``` 3. 反序列化对象:将json字符串转换为Java对象。 ```java String jsonString = "{\"name\":\"Jack\",\"age\":20}"; Person person = JSON.parseObject(jsonString, Person.class); ``` 4. 处理复杂对象:可以处理包含嵌套对象、集合、数组等的复杂Java对象。 ```java List<Person> personList = new ArrayList<>(); personList.add(new Person("Jack", 20)); personList.add(new Person("Tom", 25)); Map<String, Object> map = new HashMap<>(); map.put("personList", personList); String jsonString = JSON.toJSONString(map); Map<String, Object> resultMap = JSON.parseObject(jsonString, new TypeReference<Map<String, Object>>() {}); List<Person> resultPersonList = JSON.parseArray(JSON.toJSONString(resultMap.get("personList")), Person.class); ``` 5. 自定义序列化和反序列化:可以通过继承Serializer和Deserializer类来自定义序列化和反序列化的逻辑。 ```java public class DateSerializer implements Serializer<Date> { @Override public void write(JSONSerializer serializer, Date date, Object fieldName, Type fieldType, int features) throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = sdf.format(date); serializer.write(format); } } public class DateDeserializer implements ObjectDeserializer { @Override public Date deserialze(DefaultJSONParser parser, Type type, Object fieldName) { String dateString = parser.parseObject(String.class); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return sdf.parse(dateString); } catch (ParseException e) { throw new RuntimeException(e); } } @Override public int getFastMatchToken() { return JSONToken.LITERAL_STRING; } } SerializeConfig config = new SerializeConfig(); config.put(Date.class, new DateSerializer()); ParserConfig.getGlobalInstance().putDeserializer(Date.class, new DateDeserializer()); ``` 以上是使用alibaba的fastjson2.0的基本操作,开发人员可以根据项目需求进行相应扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值