Spring for Android是什么?
-
Spring for Android 是一个Spring框架的扩展,目标是简化本地Android应用开发。
-
特性:
一、一个针对Android的REST客户端
二、对于访问安全API的一个认证的支持
Spring for Android能为开发者带来什么?
就笔者而言,目前针对特性一体会到的好处主要有两点:
-
1、REST客户端调用模板:方便与提供REST服务的服务端进行交互。
-
2、JSON&XML解析:目前,客户端与服务端进行数据交换的格式基本全部采用JSON或XML,Spring for Android可以方便的进行JSON或XML数据的解析。
代码示例
......
private class DownloadStateTask extends AsyncTask<MediaType, Void, State> {
private String abbreviation;
@Override
protected void onPreExecute() {
showLoadingProgressDialog();
// retrieve the abbreviation from the EditText field
EditText editText = (EditText) findViewById(R.id.edit_text_abbreviation);
abbreviation = editText.getText().toString();
}
@Override
protected State doInBackground(MediaType... params) {
try {
if (params.length <= 0) {
return null;
}
MediaType mediaType = params[0];
// The URL for making the GET request
final String url = getString(R.string.base_uri) + "/state/{abbreviation}";
// Set the Accept header for "application/json" or "application/xml"
HttpHeaders requestHeaders = new HttpHeaders();
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(mediaType);
requestHeaders.setAccept(acceptableMediaTypes);
// Populate the headers in an HttpEntity object to use for the request
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();
if (mediaType.equals(MediaType.APPLICATION_JSON)) {
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
} else if (mediaType.equals(MediaType.APPLICATION_XML)) {
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());
}
// Perform the HTTP GET request
ResponseEntity<State> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity,
State.class, abbreviation);
// Return the state from the ResponseEntity
return responseEntity.getBody();
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
return null;
}
@Override
protected void onPostExecute(State state) {
dismissProgressDialog();
showState(state);
}
}
-
RestTemplate类是Spring for Android RestTemplate库的核心。从概念上来说,它类似于其他Spring项目中的模板类。RestTemplate的行为是通过提供回调方法并配置HttpMessageConverter(用于将对象序列化为HTTP请求体以及将响应反序列化为对象)来定制的。在创建新的RestTemplate实例时,构造方法会创建出几个支持对象来实现RestTemplate的功能。
-
对象到JSON的序列化:在Spring for Android RestTemplate中,对象到JSON的序列化需要使用第三方的JSON映射库。Spring for Android支持两个库,一个是Jackson JSON Processor,另一个是Google Gson。虽然Jackson是个众所周知的JSON解析库,但Gson库却更小,这样在打包时Android应用的体积就会更小。
代码示例如下:
利用Jackson库:
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
利用Gson库:
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
- 对象到XML的序列化也需要使用第三方的XML映射库。Simple XML serializer用于提供该序列化功能。 代码示例如下:
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());