AndroidInject项目使用动态代理增加对网络请求的支持

详细代码:

http://www.cnblogs.com/tiantianbyconan/p/3540427.html

AndroidInject项目是我写的一个使用注解注入来简化代码的开源项目

https://github.com/wangjiegulu/androidInject

今天新增功能如下:

1. 增加@AIScreenSize注解,作用于属性,用于注入当前设备的屏幕大小(宽高)

2. 增加对网络请求的支持,使用动态代理实现:@AIGet注解,作用于接口方法,表示以GET来请求url;@AIPost注解,作用于接口方法,表示以POST来请求url;@AIParam,用于注入请求参数

3. 增加@AINetWorker注解,作用于属性,用于注入网络请求服务

4. 增加GET或POST请求时请求参数可使用Params类传入,简化代码

标签:Gson

[1].[代码] [Java]代码 跳至
[1]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

// 用@AINetWorker注解注入NetWorker接口的子类代理(动态代理模式):

@AINetWorker
private PersonWorker personWorker;

// 然后启动线程,在线程中调用进行网络请求:

new
Thread(
new Runnable() {

     @Override

     public
void run() {

//        RetMessage<Person> retMsg = personWorker.getPersonsForGet("a1", "b1", "c1");
//        RetMessage<Person> retMsg = personWorker.getPersonsForGet2(new Params().add("aa", "a1").add("bb", "b1").add("cc", "c1"));
         RetMessage<Person> retMsg = personWorker.getPersonsForPost2(new
Params().add("aa",
"a1").add("bb",
"b1").add("cc",
"c1"));

        System.out.println(retMsg.getList().toString());

     }

}).start();

// 请求的结果封装在RetMessage类中(AndroidInject框架所作的事就是执行Get或者Post请求,获得返回结果,然后json解析后封装在RetMessage中):

/**

* Json响应结果包装类

* Created with IntelliJ IDEA.

* Author: wangjie  email:[email protected]

* Date: 14-2-7

* Time: 下午4:25

*/
public class
RetMessage<T>

{

    private
int resultCode;
// 结果码,必须包含

    private
List<T> list; // 返回的数据

    private
T obj; // 返回的数据

    private
Integer size; // 返回数据长度

    private
String errorMessage; // 返回错误信息

    public
String toJson(){

       
return new
Gson().toJson(
this);

    }

    // getter和setter方法省略...
}

// 接下来看下PersonWorker接口中所作的事情:

/**

* Created with IntelliJ IDEA.

* Author: wangjie  email:[email protected]

* Date: 14-2-7

* Time: 下午1:44

*/
public interface
PersonWorker {

    @AIGet("http://192.168.2.198:8080/HelloSpringMVC/person/findPersons?aa=#{a3}&bb=#{b3}&cc=#{c3}")

    public
RetMessage<Person> getPersonsForGet(@AIParam("a3")String a2,
@AIParam("b3") String b2,
@AIParam("c3") String c2);

 

    @AIPost("http://192.168.2.198:8080/HelloSpringMVC/person/findPersons")

    public
RetMessage<Person> getPersonsForPost(@AIParam("aa")String a2,
@AIParam("bb") String b2,
@AIParam("cc") String c2);

 

    @AIGet("http://192.168.2.198:8080/HelloSpringMVC/person/findPersons")

    public
RetMessage<Person> getPersonsForGet2(Params params);

 

    @AIPost("http://192.168.2.198:8080/HelloSpringMVC/person/findPersons")

    public
RetMessage<Person> getPersonsForPost2(Params params);

 

 

} /**

*另:如果,你需要写一个查询User信息的网络请求,应该怎么写?

*只需编写UserWorker接口,然后声明方法findUsers(),写上@AIGet或者@AIPost注解,写明url和请求参*数。然后通过@AINetWorker注解注入userWorker,然后开启线程,调用userWorker的findUsers()方法即可。

*当然UserWorker也可以不使用注解获得,而是调用“NetInvoHandler.getWorker(UserWorker.class)”获得!

*/

时间: 2024-10-13 10:25:51

AndroidInject项目使用动态代理增加对网络请求的支持的相关文章

使用Charles代理功能将网络请求定向至本地文件

最近在进行前端开发的时候发现Charles一个非常牛叉的功能,就是可以通过代理将网络请求定向至本地文件.有了这个功能在进行iOS开发时就可以在缺少后台接口的情况下更加真实的进行数据mock了(反正我们公司的后台...不想吐槽了). 我们先用NSURLSession发送一段简单的post请求: NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.12

动态代理实现设置tomcat请求编码

1)htmlcode: <html> <head> <title>$Title$</title> </head> <body> <form action="/login" method="post" > 姓名:<input type="text" name="username"><br> 备注:<textarea&

CgLib动态代理学习【Spring AOP基础之一】

如果不了解JDK中proxy动态代理机制的可以先查看上篇文章的内容:Java动态代理学习[Spring AOP基础之一] 由于Java动态代理Proxy.newProxyInstance()的时候会发现其参数类型是ClassLoader classLoader, Class<?>[] interface, InvocationHandler handler, 只支持根据接口实现代理类,如果所有代码都是自己掌控,当然没有问题.所有的业务逻辑均抽象出接口,然后所有的业务类实现接口,这样所有的业务类

Java中的静态代理、通用动态代理类以及原理剖析

代理模式和静态代理 在开发中,代理模式是常用的模式之一,一般来说我们使用的代理模式基本上都是静态代理,实现模式大致如下 : 我们以网络代理为例,简单演示一下静态代理的实现 : // 网络接口 interface Network { public void surfTheInternet(); public void gotoFacebook(); } // 普通网络 class CommonNetwork implements Network { @Override public void su

iOS网络请求 添加全局代理 NSURLSessionConfiguration 解决方案

1.最近做项目.文件存储服务器是用的亚马逊的.如果直接访问.下载其资源速度很慢.所以需要在网络请求的时候添加一个代理.加速网络访问 2.代理服务器是一个HTTPS 的一个服务器 3.思路.解决方案.利用运行时机制(添加分类NSURLSession+Change)针对  NSURLSession 初始化添加代理对所有的网络请求进行拦截处理 #import "NSURLSession+Change.h" @implementation NSURLSession (Change) +(voi

Android 各大网络请求库的比较及实战,android请求库实战

自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient.

各大网络请求框架的比较

原文:http://www.cnblogs.com/changyaohua/p/4992987.html 自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,

Android 几种网络请求的区别与联系

HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConnection存在着一些bug,所以建议在android 2.3以后使用HttpUrlConnection,之前使用HttpClient. 在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择.而在Android 2.3版本及以后,HttpURLConnecti

iOS_第3方网络请求_YTKNetwork

github地址:https://github.com/yuantiku/YTKNetwork/blob/master/ProGuide.md YTKNetwork 是什么 YTKNetwork 是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,其实现了一套 High Level 的 API,提供了更高层次的网络访问抽象. YTKNetwork提供了哪些功能 相比 AFNetworking,YTKNetwork 提供了以下更高级的功能: 支持按时间缓存网络请求内容