Android annotations REST

使用前:

  1 public class BookmarksToClipboardActivity extends Activity {
  2
  3   BookmarkAdapter adapter;
  4
  5   ListView bookmarkList;
  6
  7   EditText search;
  8
  9   BookmarkApplication application;
 10
 11   Animation fadeIn;
 12
 13   ClipboardManager clipboardManager;
 14
 15   @Override
 16   protected void onCreate(Bundle savedInstanceState) {
 17     super.onCreate(savedInstanceState);
 18
 19     requestWindowFeature(Window.FEATURE_NO_TITLE);
 20     getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);
 21
 22     setContentView(R.layout.bookmarks);
 23
 24     bookmarkList = (ListView) findViewById(R.id.bookmarkList);
 25     search = (EditText) findViewById(R.id.search);
 26     application = (BookmarkApplication) getApplication();
 27     fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
 28     clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
 29
 30     View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
 31     updateBookmarksButton1.setOnClickListener(new OnClickListener() {
 32
 33       @Override
 34       public void onClick(View v) {
 35         updateBookmarksClicked();
 36       }
 37     });
 38
 39     View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
 40     updateBookmarksButton2.setOnClickListener(new OnClickListener() {
 41
 42       @Override
 43       public void onClick(View v) {
 44         updateBookmarksClicked();
 45       }
 46     });
 47
 48     bookmarkList.setOnItemClickListener(new OnItemClickListener() {
 49
 50       @Override
 51       public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
 52         Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
 53         bookmarkListItemClicked(selectedBookmark);
 54       }
 55     });
 56
 57     initBookmarkList();
 58   }
 59
 60   void initBookmarkList() {
 61     adapter = new BookmarkAdapter(this);
 62     bookmarkList.setAdapter(adapter);
 63   }
 64
 65   void updateBookmarksClicked() {
 66     UpdateBookmarksTask task = new UpdateBookmarksTask();
 67
 68     task.execute(search.getText().toString(), application.getUserId());
 69   }
 70
 71   private static final String BOOKMARK_URL = //
 72   "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
 73
 74
 75   class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {
 76
 77     @Override
 78     protected Bookmarks doInBackground(String... params) {
 79       String searchString = params[0];
 80       String userId = params[1];
 81
 82       RestTemplate client = new RestTemplate();
 83       HashMap<String, Object> args = new HashMap<String, Object>();
 84       args.put("search", searchString);
 85       args.put("userId", userId);
 86       HttpHeaders httpHeaders = new HttpHeaders();
 87       HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
 88       ResponseEntity<Bookmarks> response = client.exchange( //
 89           BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
 90       Bookmarks bookmarks = response.getBody();
 91
 92       return bookmarks;
 93     }
 94
 95     @Override
 96     protected void onPostExecute(Bookmarks result) {
 97       adapter.updateBookmarks(result);
 98       bookmarkList.startAnimation(fadeIn);
 99     }
100
101   }
102
103   void bookmarkListItemClicked(Bookmark selectedBookmark) {
104     clipboardManager.setText(selectedBookmark.getUrl());
105   }
106
107 }

使用后:

 1 @NoTitle
 2 @Fullscreen
 3 @EActivity(R.layout.bookmarks)
 4 public class BookmarksToClipboardActivity extends Activity {
 5
 6   BookmarkAdapter adapter;
 7
 8   @ViewById
 9   ListView bookmarkList;
10
11   @ViewById
12   EditText search;
13
14   @App
15   BookmarkApplication application;
16
17   @RestService
18   BookmarkClient restClient;
19
20   @AnimationRes
21   Animation fadeIn;
22
23   @SystemService
24   ClipboardManager clipboardManager;
25
26   @AfterViews
27   void initBookmarkList() {
28     adapter = new BookmarkAdapter(this);
29     bookmarkList.setAdapter(adapter);
30   }
31
32   @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
33   void updateBookmarksClicked() {
34     searchAsync(search.getText().toString(), application.getUserId());
35   }
36
37   @Background
38   void searchAsync(String searchString, String userId) {
39     Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
40     updateBookmarks(bookmarks);
41   }
42
43   @UiThread
44   void updateBookmarks(Bookmarks bookmarks) {
45     adapter.updateBookmarks(bookmarks);
46     bookmarkList.startAnimation(fadeIn);
47   }
48
49   @ItemClick
50   void bookmarkListItemClicked(Bookmark selectedBookmark) {
51     clipboardManager.setText(selectedBookmark.getUrl());
52   }
53
54 }
1 @Rest("http://www.bookmarks.com")
2 public interface BookmarkClient {
3
4   @Get("/bookmarks/{userId}?search={search}")
5   Bookmarks getBookmarks(String search, String userId);
6
7 }

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

自己构造RestTemplate的原生写法:

 1 HttpHeaders requestHeaders = new HttpHeaders();
 2 List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
 3 acceptableMediaTypes.add(MediaType.APPLICATION_JSON);
 4 requestHeaders.setAccept(acceptableMediaTypes);
 5
 6 HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
 7
 8 RestTemplate restTemplate = new RestTemplate();
 9 restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
10
11 ResponseEntity<User[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, User[].class);  

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

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

wiki api :

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

时间: 2024-10-11 22:48:19

Android annotations REST的相关文章

使用Android Annotations开发

使用Android Annotations框架gradle配置1.修改Module下的build.gradle apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android

Android Annotations开源框架学习 + eclipse(一)

1.下载 相关jar包 (下载地址:https://repo1.maven.org/maven2/org/androidannotations/androidannotations-bundle/3.3.1/androidannotations-bundle-3.3.1.zip) 2.配置eclipse 在libs下导入androidannotations-api-3.3.1.jar ,在eclipse项目中 新增compile-lib 文件夹,其中放置:androidannotations-3

【FastDev4Android框架开发】RecyclerView完全解析之结合AA(Android Annotations)注入框架实例(三十)

(一).前言: 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridView之类控件有很多的优点,例如:数据绑定,Item View创建,View的回收以及重用等机制.本系列文章会包括到以下三个部分: RecyclerView控件的基本使用,包括基础,进阶,高级部分,动画之类(点击进入) RecyclerView控件的实战实例(点击进入) RecyclerView控件集合AA

Android Annotations(1)

特性: Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性. 特性: 依赖注入: inject views, extras, system services, resources, ... 简化的线程模型: annotate your methods so that they execute on the UI thread or on a background thread. Event 绑定:

Android Annotations浅析

这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的, 相信用过Spring注解的孩子理解起来应该比较容易!就是配置起来比较吃力. 关于AndroidAnnotaions的介绍,网上已经很多了,我这里不再累赘. 1.AndroidAnnotations官网:http://androidannotations.org/(也许你需要翻墙) 2.eclipse中使用androidannotations的配置方法说明:https://

Android Annotations Eclipse 配置 (3)

Android Annotations 本来我想写个 Java 版本的<RESTful客户端库:RestClient>用于 Android 应用开发,结果发现不太好写,虽然用了 Dynamic Proxy 实现了大部分功能,但是因为无法通过反射取得参数名,而且 Java 没有 DuckType ,再加上也没有方便的 Dict 类型,搞出来的东西很难看,不好用. 后来令狐给我推荐了这个 Android Annotations ,这个用 annotation 实现的方法真是好,所以想试一下,刚好在

Android应用开发框架:Android Annotations学习笔记总结

Android应用开发框架:Android Annotations Android Annotations是一个开源的框架,用于加速 Android应 用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性.其实编程的开源的世界里有很多很多书本上没有但是github全球最大的程序员 社交网站和代码托管网站里有很多很多有用的项目和开源代码,比如这个Android应用开发框架Android Annotations,所以英语水平的提高势在必行啊,否则我永远只能等到翻译组翻译出来猜轮到我啃

Android开发之Android Annotations框架

昨天研究了一下Volley网络通信框架的使用,今天有研究了一下Android Annotations框架,发现Android Annotations框架确实可以减少代码量. Android Annotations 是一个开源的框架,用于加速 Android 应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性. 功能模块: 1. 使用依赖注入(Dependency Injection) ----------------------------------------------

Android Annotations 注解例子

Android 最火的快速开发框架androidannotations配置详解文章中有eclipse配置步骤,Android 最火快速开发框架AndroidAnnotations简介文章中的简单介绍,本篇注重讲解AndroidAnnotations中注解方法的使用. @EActivity 示例: @EActivity(R.layout.main) public class MyActivity extends Activity { } @fragment 示例: @EFragment(R.lay