Gson的TypeToken使用
程序员文章站
2024-03-16 08:30:28
...
public class MainActivity extends AppCompatActivity {
String jsonString = "[{\"id\":18,\"city\":\"test\",\"street\":\"test 1\",\"zipcode\":121209,\"state\":\"IL\",\"lat\":32.158138,\"lng\":34.807838},{\"id\":19,\"city\":\"test\",\"street\":\"1\",\"zipcode\":76812,\"state\":\"IL\",\"lat\":32.161041,\"lng\":34.810410}]";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<MapData> mUser = fromToJson(jsonString);
Toast.makeText(this,mUser.toString(),Toast.LENGTH_SHORT).show();
}
//根据泛型返回解析制定的类型
public <T> T fromToJson(String json){
Type type = new TypeToken<T>(){}.getType();
Gson gson = new Gson();
return gson.fromJson(json, type);
}
}
还有一种情况我们在安卓中经常的去解析一个类。通过泛型,那么我么你如何直接得到这个泛型呢。
public abstract class OkBaseJsonParser<T> extends OkBaseParser<T> {
//这里我们返回得到一个type
public Type mType;
public OkBaseJsonParser() {
mType = getSuperclassTypeParameter(getClass());
}
protected abstract T parse(Response response) throws IOException;
private static Type getSuperclassTypeParameter(Class<?> subclass) {
//得到带有泛型的类
Type superclass = subclass.getGenericSuperclass();
if (superclass instanceof Class) {
throw new RuntimeException("Missing type parameter.");
}
//取出当前类的泛型
ParameterizedType parameter = (ParameterizedType) superclass;
return $Gson$Types.canonicalize(parameter.getActualTypeArguments()[0]);
}
}
为什么我们需要type?
//Gso接受一个Type,返回一个我们解析的实例就可以了。
return mGson.fromJson(body, mType);
推荐阅读
-
完成该操作所需的数据还不可使用 博客分类: AJAX
-
Gson的TypeToken使用
-
gson的使用分享
-
关于setInterval定时器的使用示例 博客分类: javascript JavaHTML
-
Sybase cursor的使用 SybaseSQLSQL Server
-
使用POI和DynaBean导出Excel的完整例子 ExcelApacheSQLStrutsBean
-
使用POI和DynaBean导出Excel的完整例子 ExcelApacheSQLStrutsBean
-
TensorFlow 卷积神经网络之使用训练好的模型识别猫狗图片
-
Mac系统下使用Java tess4j识别验证码、图片文字遇到的问题,最终解决方案tesseract
-
数据结构二分法-给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。