Android网络框架 Volley(二)

Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据。Volley库的网络请求都是异步的,你不必担心异步处理问题。
Volley的优点:

  • 请求队列和请求优先级
  • 请求Cache和内存管理
  • 扩展性性强
  • 可以取消请求

下载和编译volley.jar
需要安装git,ant,android sdk

1
git clone https: //android .googlesource.com /platform/frameworks/volley

编译jar:


1
android update project -p . ant jar

添加volley.jar到你的项目中
不过已经有人将volley的代码放到github上了:
https://github.com/mcxiaoke/android-volley,你可以使用更加简单的方式来使用volley:
Maven
format: jar


1
2
3
4
5
< dependency >
   < groupId >com.mcxiaoke.volley</ groupId >
   < artifactId >library</ artifactId >
   < version >1.0.6</ version >
</ dependency >

Gradle
format: jar


1
compile 'com.mcxiaoke.volley:library:1.0.6'

Volley工作原理图

201656151349558.jpg (1428×802)

创建Volley 单例
使用volley时,必须要创建一个请求队列RequestQueue,使用请求队列的最佳方式就是将它做成一个单例,整个app使用这么一个请求队列。


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
public class AppController extends Application {
 
public static final String TAG = AppController. class
     .getSimpleName();
 
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
 
private static AppController mInstance;
 
@Override
public void onCreate() {
   super .onCreate();
   mInstance = this ;
}
 
public static synchronized AppController getInstance() {
   return mInstance;
}
 
public RequestQueue getRequestQueue() {
   if (mRequestQueue == null ) {
     mRequestQueue = Volley.newRequestQueue(getApplicationContext());
   }
 
   return mRequestQueue;
}
 
public ImageLoader getImageLoader() {
   getRequestQueue();
   if (mImageLoader == null ) {
     mImageLoader = new ImageLoader( this .mRequestQueue,
         new LruBitmapCache());
   }
   return this .mImageLoader;
}
 
public <T> void addToRequestQueue(Request<T> req, String tag) {
   // set the default tag if tag is empty
   req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
   getRequestQueue().add(req);
}
 
public <T> void addToRequestQueue(Request<T> req) {
   req.setTag(TAG);
   getRequestQueue().add(req);
}
 
public void cancelPendingRequests(Object tag) {
   if (mRequestQueue != null ) {
     mRequestQueue.cancelAll(tag);
   }
}
}

另外,你还需要一个Cache来存放请求的图片:


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
public class LruBitmapCache extends LruCache<String, Bitmap> implement ImageCache {
   public static int getDefaultLruCacheSize() {
     final int maxMemory = ( int ) (Runtime.getRuntime().maxMemory() / 1024 );
     final int cacheSize = maxMemory / 8 ;
 
     return cacheSize;
   }
 
   public LruBitmapCache() {
     this (getDefaultLruCacheSize());
   }
 
   public LruBitmapCache( int sizeInKiloBytes) {
     super (sizeInKiloBytes);
   }
 
   @Override
   protected int sizeOf(String key, Bitmap value) {
     return value.getRowBytes() * value.getHeight() / 1024 ;
   }
 
   @Override
   public Bitmap getBitmap(String url) {
     return get(url);
   }
 
   @Override
   public void putBitmap(String url, Bitmap bitmap) {
     put(url, bitmap);
   }
}

别忘记在AndroidManifest.xml文件中添加android.permission.INTERNET权限。

HTTP请求实例


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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
private Context mContext;
private RequestQueue mRequestQueue;
private StringRequest mStringRequest;
 
// 利用Volley实现Post请求
private void volley_post() {
   mContext = this ;
   mRequestQueue = Volley.newRequestQueue(mContext);
   mStringRequest = new StringRequest(Method.POST, url,
       new Response.Listener<String>() {
         @Override
         public void onResponse(String response) {
           System.out.println( "请求结果:" + response);
         }
       }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
           System.out.println( "请求错误:" + error.toString());
         }
       }) {
     // 携带参数
     @Override
     protected HashMap<String, String> getParams()
         throws AuthFailureError {
       HashMap<String, String> hashMap = new HashMap<String, String>();
       hashMap.put( "un" , "852041173" );
       hashMap.put( "pw" , "852041173abc" );
       return hashMap;
     }
 
     // Volley请求类提供了一个 getHeaders()的方法,重载这个方法可以自定义HTTP 的头信息。(也可不实现)
     public Map<String, String> getHeaders() throws AuthFailureError {
       HashMap<String, String> headers = new HashMap<String, String>();
       headers.put( "Accept" , "application/json" );
       headers.put( "Content-Type" , "application/json; charset=UTF-8" );
       return headers;
     }
 
   };
 
   mRequestQueue.add(mStringRequest);
 
}
 
private JsonObjectRequest mJsonObjectRequest;
 
// 利用Volley实现Json数据请求
private void volley_json() {
   mContext = this ;
   // 1 创建RequestQueue对象
   mRequestQueue = Volley.newRequestQueue(mContext);
   // 2 创建JsonObjectRequest对象
   mJsonObjectRequest = new JsonObjectRequest(url, null ,
       new Response.Listener<JSONObject>() {
         @Override
         public void onResponse(JSONObject response) {
           System.out.println( "请求结果:" + response.toString());
         }
       }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
           System.out.println( "请求错误:" + error.toString());
         }
       });
 
   // 3 将JsonObjectRequest添加到RequestQueue
   mRequestQueue.add(mJsonObjectRequest);
 
}
 
// 利用Volley实现Get请求
private void volley_get() {
   mContext = this ;
   String url = "http://www.aplesson.com/" ;
   // 1 创建RequestQueue对象
   mRequestQueue = Volley.newRequestQueue(mContext);
   // 2 创建StringRequest对象
   mStringRequest = new StringRequest(url,
       new Response.Listener<String>() {
         @Override
         public void onResponse(String response) {
           System.out.println( "请求结果:" + response);
         }
       }, new Response.ErrorListener() {
         @Override
         public void onErrorResponse(VolleyError error) {
           System.out.println( "请求错误:" + error.toString());
         }
       });
   // 3 将StringRequest添加到RequestQueue
   mRequestQueue.add(mStringRequest);
}


Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。JsonObjectRequest:返回JSON对象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,这样可以自己处理数据,更加灵活。
另外可以继承Request<T>自定义Request。

取消Request
Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,Activity被结束了,此时如果继续使用其中的Context等,除了无辜的浪费CPU,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。Volley支持多种request取消方式。
可以针对某些个request做取消操作:


1
2
3
4
5
6
@Override
  public void onStop() {
    for (Request <?> req : mRequestQueue) {
      req.cancel();
    }
  }

取消这个队列里的所有请求:


1
2
3
4
5
6
@Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super .onStop();
    mRequestQueue.cancelAll( this );
  }

可以根据RequestFilter或者Tag来终止某些请求


1
2
3
4
5
6
7
8
9
@Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super .onStop();
 
    mRequestQueue.cancelAll( new RequestFilter() {});
    or
    mRequestQueue.cancelAll( new Object());
  }

Volley支持http的GET、POST、PUT、DELETE等方法。

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值