使用前:

 public class BookmarksToClipboardActivity extends Activity {

   BookmarkAdapter adapter;

   ListView bookmarkList;

   EditText search;

   BookmarkApplication application;

   Animation fadeIn;

   ClipboardManager clipboardManager;

   @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); setContentView(R.layout.bookmarks); bookmarkList = (ListView) findViewById(R.id.bookmarkList);
search = (EditText) findViewById(R.id.search);
application = (BookmarkApplication) getApplication();
fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
updateBookmarksButton1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
updateBookmarksClicked();
}
}); View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
updateBookmarksButton2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
updateBookmarksClicked();
}
}); bookmarkList.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
bookmarkListItemClicked(selectedBookmark);
}
}); initBookmarkList();
} void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
} void updateBookmarksClicked() {
UpdateBookmarksTask task = new UpdateBookmarksTask(); task.execute(search.getText().toString(), application.getUserId());
} private static final String BOOKMARK_URL = //
"http://www.bookmarks.com/bookmarks/{userId}?search={search}"; class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> { @Override
protected Bookmarks doInBackground(String... params) {
String searchString = params[0];
String userId = params[1]; RestTemplate client = new RestTemplate();
HashMap<String, Object> args = new HashMap<String, Object>();
args.put("search", searchString);
args.put("userId", userId);
HttpHeaders httpHeaders = new HttpHeaders();
HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
ResponseEntity<Bookmarks> response = client.exchange( //
BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
Bookmarks bookmarks = response.getBody(); return bookmarks;
} @Override
protected void onPostExecute(Bookmarks result) {
adapter.updateBookmarks(result);
bookmarkList.startAnimation(fadeIn);
} } void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
} }

使用后:

 @NoTitle
@Fullscreen
@EActivity(R.layout.bookmarks)
public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; @ViewById
ListView bookmarkList; @ViewById
EditText search; @App
BookmarkApplication application; @RestService
BookmarkClient restClient; @AnimationRes
Animation fadeIn; @SystemService
ClipboardManager clipboardManager; @AfterViews
void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
} @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
void updateBookmarksClicked() {
searchAsync(search.getText().toString(), application.getUserId());
} @Background
void searchAsync(String searchString, String userId) {
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
updateBookmarks(bookmarks);
} @UiThread
void updateBookmarks(Bookmarks bookmarks) {
adapter.updateBookmarks(bookmarks);
bookmarkList.startAnimation(fadeIn);
} @ItemClick
void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
} }
 @Rest("http://www.bookmarks.com")
public interface BookmarkClient { @Get("/bookmarks/{userId}?search={search}")
Bookmarks getBookmarks(String search, String userId); }

且利用androidannotations的Rest注解替换手工建立Spring Android RestTemplate对象,不仅可以减少很多代码,同时使工程结构更简洁、严谨,利于复用。

自己构造RestTemplate的原生写法:

 HttpHeaders requestHeaders = new HttpHeaders();
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(acceptableMediaTypes); HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); ResponseEntity<User[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, User[].class);

利用androidannotations的Rest注解替换后的代码:

 //初始化
@RestService
RestApiService restApiService;
ResponseEntity<User[]> responseEntity = restApiService.getByStatus();
 @Rest(rootUrl = "http://10.0.2.2:8080/together/api", converters = { MappingJackson2HttpMessageConverter.class })
public interface RestApiService { @Get("/user/getByStatus.do?status=1")
ResponseEntity<User[]> getUsersByStatus(); }

wiki api :

https://github.com/excilys/androidannotations/wiki/Rest-API

最新文章

  1. Linux FTP的安装与配置
  2. Python—使用__slots__限制实例的属性
  3. IOS--手势控制的使用
  4. python机器学习《回归 一》
  5. stm32f系列单片机startup_stm32fxxx.s文件说明(转)
  6. unity入门笔记
  7. DzzOffice添加动态壁纸例子-Bing每日壁纸
  8. /Users/XX/Library/Developer/Xcode/DerivedData/XX.app/xxsdk.bundle Directory not empty
  9. eclipse中使用loadrunner java api步骤
  10. asp.net mvc4设置area里面使用相同的 Controller 名称并设置area里的页面为起始页
  11. Android L(5.0)源码之图形与图像处理之绘图——Canvas
  12. 并发思考-actor和thread那个好点?
  13. conda创建py27虚拟环境安装theano(anaconda3)
  14. 【原创】大数据基础之HDFS(2)HDFS副本数量检查及复制逻辑
  15. Content Security Policy介绍
  16. COGS.1317.数列操作c(分块 区间加 区间求和)
  17. python 视频处理,提取视频相关帧,读取Excel
  18. Learning to Rank算法介绍:RankSVM 和 IR SVM
  19. 【Python编程:从入门到实践】chapter8 函数
  20. Flink及主流流框架spark,storm比较

热门文章

  1. 简单的mysql封装类
  2. CLR via C#(06)- 构造器
  3. @ifconfig eth0|awk -F &quot;[ :]+&quot; &#39;NR==2{print $4 &quot;/&quot; $NF}&#39;中&quot;[ :]+&quot; 是什么意思?@
  4. ASP.NET Web Api 使用CacheCow和ETag缓存资源(转载)
  5. Pyqt QDockWidget 停靠窗体
  6. Yii 同域名的单点登录 SSO实现
  7. poj 1611:The Suspects(并查集,经典题)
  8. [LeetCode] Pow(x, n)
  9. MD5与Base64的思考
  10. android 入门-动画与容器