Android开发:用Gson处理泛型的方法

在实际开发中,经常用Gson处理接口返回的数据,会因为处理的类型不同,需写不同的方法,也因为返回是object或者是list,也要写不同的方法,这样不符合开发开发的复用原则,本着代码的尽量可复用,我找到了一个可以复用的方法,直接穿入需要解析的数据和返回的object类型,直接出解析结果,一劳永逸,具体的方法如下:

protected <T> T getGsonObject(String data, Class<T> mClass) {
		T result = gson.fromJson(data, mClass);
		return result;
	}

	public <T> List<T> getGsonList(String data, Class<T> klass) {
	    return gson.fromJson(data, new ListOfSomething<T>(klass));
	}

	class ListOfSomething<X> implements ParameterizedType {
	    private Class<?> wrapped;

	    public ListOfSomething(Class<X> wrapped) {
	        this.wrapped = wrapped;
	    }
	    public Type[] getActualTypeArguments() {
	        return new Type[] {wrapped};
	    }
	    public Type getRawType() {
	        return List.class;
	    }
	    public Type getOwnerType() {
	        return null;
	    }
	}

上面的两个方法,都是只要传入需要解析的字符串和返回的class类型,直接得到我们需要的结果,当节省不少时间

这篇文章参考了许多stackoverflow上面的资料,就当做翻译吧。

时间: 2025-01-06 20:25:43

Android开发:用Gson处理泛型的方法的相关文章

Android开发之深入理解泛型extends和super的区别

摘要: 什么是泛型?什么是擦除边界?什么是上界限定或下界限定(子类型限定或超类型限定)?什么是类型安全?泛型extends关和super关键字结合通配符?使用的区别,两种泛型在实际Android开发中有什么用处? 一.什么是泛型? 泛型,大概的意思是指没有指定具体的类型的类或方法,以泛型的形式传入一个类中或方法中,在Java编程(Android编程)里面使用一对尖括号和一个大写字母表示,例如: //泛型类 public interface List<E>{} //泛型方法,类型参数位于返回类型

Android开发环境搭建及常见问题解决方法

在移动互联网的时代,Android的份额早已超过了苹果.Android的出现无疑加速了移动互联网的普及,手机操作系统已经是IOS和Android的天下了,什么winphone之类的可以说没它们什么事了.记得三年前做过一个简单的基于Android2.2的一个小应用.当时只是为了好玩,因而也没有相应的文档记录:后来由于工作原因也就没有继续讲Android开发进行下去.趁有时间再来折腾折腾Android的开发吧.想要开发Android的应用,首先需要安装Android的开发环境,下面记录了Androi

android开发之蓝牙配对连接的方法

最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结. 在做android蓝牙串口连接的时候一般会使用 ? 1 2 3 4 5 6 7 8 BluetoothSocket tmp = null; // Get a BluetoothSocket for a connection with the // given BluetoothDevice try {          tmp = device.createRfcom

【转】Android开发中让你省时省力的方法、类、接口

http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=6611409663&utm_medium=toutiao_android getParent().requestDisallowInterceptTouchEvent(true); 解释:一次点击事件是从父

从零开始学android开发-View的setOnClickListener的添加方法

1)第一种,也是最长见的添加方法(一下都以Button为例) Button btn = (Button) findViewById(R.id.myButton); btn .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //do something } }); 2)第二种,下面这个方法较前一种稍微简单了一些,允许多个Buttons共享一个Listener.通过Switch控制对不同But

从零开始学android开发-用Intent启动Activity的方法

启动另外一个Activity,可以有的方法有用setClass()和Component Name 1. 先说在setClass启动一个Activity的方法吧: Intent intent = new Intent(); intent.setClass(this, CreatePlaylist.class) //参数一为当前Package的context,t当前Activity的context就是this,其他Package可能用到createPackageContex()参数二为你要打开的Ac

从零开始学android开发-详细谈谈intent的startActivityForResult()方法

1.两种实现activity跳转的方法 实现activity的跳转主要有两种方法,startActivity()和startActivityForResult();例如activity A跳转到activity B 对于,第一种,是把activity A的数据,通过intent传送到activity B,但是不能返回数据. 关于第一种,可以参考我之前的这篇博文http://blog.csdn.net/conowen/article/details/7270393 2.第二种方法startActi

ANDROID开发中定时器的3种方法

在android中,经常用到的定时器主要有以下几种实现:一.采用Handler与线程的sleep(long )方法二.采用Handler的postDelayed(Runnable, long) 方法三.采用Handler与timer及TimerTask结合的方法.下面逐一介绍:一.采用Handle与线程的sleep(long )方法Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释.1.定义一个Handle

Android开发中,一些相见恨晚的方法、类或接口

1.Throwable接口中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[]: 2.StackTraceElement类,其中四个方法getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印Log时非常有用: 3.UncaughtExceptionHandler接口,再好的代码异常难免,利用此接口可以处理未捕获的异常: 4.View中的isS