使用Spring for Android获取网络数据
来源:互联网 发布:画设备流程图软件 编辑:程序博客网 时间:2024/05/16 06:16
Spring for Android介绍
如果想要在我们的Android应用中使用某个REST API,我们需要在UI里搜集用户的输入,并将其转换为API可以接受的格式,然后以HTTP的方式提交给服务端,对于获得的字符串响应,需要自行解析并获得需要的信息。我们发现中途很多步骤都是重复的,spring for android可以为我们简化这些重复的步骤而让开发人员更关注与app相关的核心业务逻辑。
Spring For Android是Spring框架的一个扩展,主要目的在简化Android本地应用的开发。
主要提供了两个方面的功能:
- 使用RestTemplate来为你的Android客户端提供REST服务
- 提供了跟其它诸如Twitter和Facebook等社交网络的集成与OAuth授权客户端等等
本文主要使用第一个功能来进行网络数据获取的简化。
下面我们以一个REST API的加载实例来展示spring for android的作用。
API介绍
api的地址为http://115.29.184.56:8090/api/group,以get方式获取,但是需要设置对应的header来确认权限,这里需要以” liuqin 123”的Base64编码后的token,以”Basic”+空格+token后的值加入请求头”Authorization”。
返回的格式为
[ {id:1,name:"2013级1班" }]
使用流程
首先需要添加spring for android的依赖
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M3'compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.5'
这里添加了jackson的依赖是为了解析对应的json文本。
注:构建时如果出现 duplicated files…错误,则需要在module 的build文件的android配置项中加入
packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/license.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' }
保证构建成功。
然后添加对应的Java Bean用来接收服务器的响应值’
public class GroupInfo { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
注:字段名字必须和api的返回值相同
我们这里采用AsyncTask来异步加载数据,然后在其中的doInBackground方法中进行数据的加载。以下我们不详细说明界面的更新流程,主要说明spring for android的使用方法。
Spring for Android提供的Rest客户端主要通过 RestTemplate 类来进行各种数据操作。
创建
RestTemplate可以直接通过其无参构造函数创建
RestTemplate restTemplate = new RestTemplate();
添加响应头
RestTemplate添加响应头需要自行创建HttpEntity
HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.add(headername, headerValue);HttpEntity httpEntity = new HttpEntity(httpHeaders);
添加数据转换器
RestTemplate提供数据转换器,用于将原生的服务器响应转换为对用的JavaBean,其中API里内置了8种转换器,参见 RestTemplate。这里我们添加了Jackon的转换器用来转换json数据。
restTemplate.getMessageConverters().add(newMappingJackson2HttpMessageConverter());
获取响应
参数及设置完成后,我们可以通过restTemplate获取响应,这里使用exchange方法,通过对应的url、HTTP请求方法、请求参数、转换类型,来获取对应的响应,由于API返回的为一个数组,所以这里使用的为GroupInfo[].class。然后使用responseEntity.getBody()即可获取具体的响应内容。
ResponseEntity<GroupInfo[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, GroupInfo[].class);GroupInfo[] result = responseEntity.getBody();
以下为AsyncTask的全部内容
private class MyTask extends AsyncTask<Void, Void, GroupInfo> { @Override protected GroupInfo doInBackground(Void... params) { String url = "http://115.29.184.56:8090/api/group"; String key = getKey(); String headerValue = "Basic " + key; HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Authorization", headerValue); HttpEntity httpEntity = new HttpEntity(httpHeaders); RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); ResponseEntity<GroupInfo[]> responseEntity = restTemplate.exchange(url, HttpMethod .GET, httpEntity, GroupInfo[].class); return responseEntity.getBody()[0]; } @Override protected void onPostExecute(GroupInfo o) { //update UI } private String getKey() { return Base64Utils.encodeToString("liuqin:123".getBytes()); }}
执行结果
- 使用Spring for Android获取网络数据
- Android获取网络数据
- android获取网络数据
- android获取网络数据
- 使用Spring for Android改善数据交互流程
- Android使用HTTP GET、HTTP POST获取网络数据
- Android中获取网络数据
- android—获取网络数据
- android-如何获取网络数据
- 使用GDAL获取网络数据
- Asynctask获取网络数据使用
- 使用jsoup获取网络数据
- Android HttpClient多线程获取网络数据抛出ConnectionPoolTimeoutException: Timeout waiting for connection
- Android获取网络图片、获取服务器数据
- Mono for Android 通过网络获取位置
- Android-使用网络获取定位
- 第十二篇:Android GET请求获取网络数据以及POST数据(使用HttpURLConnection)
- Android通过URL获取网络数据
- CSS之Responsive设计的关键三步
- HTTP请求,包括OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT介绍
- 选择排序
- spring+mybatis启动NoClassDefFoundError异常分析三部曲之三:改spring源码,取详细错误
- 模式识别总结 下
- 使用Spring for Android获取网络数据
- java性能调优权威指南读书笔记六(JVM性能调优)
- 第一行代码 第三章 引入布局和自定义控件
- 判断素数和打印100-200的素数
- Gradle笔记——Gradle的简介与安装
- 6174问题
- PHP+TP框架实现获取微信JS-SDK使用权限签名算法需要的jsapi_ticket,并全局缓存
- import caffe 出错的问题
- CSU1775-悲催的移寝-贪心