本帖最后由 小鲁哥哥 于 2017-4-8 20:46 编辑
【济南中心】Android就业面试技巧系列-技术篇(Volley框架)
Volley简介: 比较流行的http开发库。也封装这个线程。
1.使用底层代码来写http请求 代码量比较大。httpclient j2se httpURLConnection AscynHttpClient
2.高频率http请求 优势在处理数据量比较小的频率高的请求。
3.劣势 大文件的请求。大文件的上传和下载。
环境搭建: 1.创建一个工程
2.配置权限 Inernet
<!--联网权限-->
<uses-permission android:name="android.permission.INTERNET" />
3.添加jar同时绑定源代码
dependencies {
compile 'com.mcxiaoke.volley:library:1.0.19'
RequestQueue: RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。建议在Application子类中创建。
一.创建在Application http.itheima.com.http_volley.VolleyApplication [Java] 纯文本查看 复制代码 public class VolleyApplication extends Application{
//只要有一个组件启动就可执行onCreate
private RequestQueue requestQueue;
//提供get获取方法
public RequestQueue getInstance()
{
return requestQueue;
}
@Override
public void onCreate() {
super.onCreate();
//创建一个核心类
requestQueue = Volley.newRequestQueue(this);//参1.Context上下文
}
}
二.在功能清单里面配置 src/main/AndroidManifest.xml <application
android:name="http.itheima.com.http_volley.VolleyApplication"
三 .提供get该法给其它的页面使用。 http.itheima.com.http_volley.MainActivity [Java] 纯文本查看 复制代码 //获取应用上下文
VolleyApplication application= (VolleyApplication) this.getApplication();
//返回请求队表
RequestQueue queue=application.getInstance();
Log.i("MainActivity",queue+"");
案例1: Request.Method volley的请求方式 常用的有get post
Response.Listener volley通过注册监听器获取服务端返回的数据 (成功时候返回的数据)
Response.ErrorListener 网络可能出现异常。volley也通过监听器处理网络异常(失败时候返回的数据)
StringRequest volley提供的http请求对象的封装。如果你要发送一个请求只需要创建Request的实现类的实例。 [Java] 纯文本查看 复制代码 //创建一个请求
String url="http://192.168.1.114:8080/webapi//get?username=itheima";
//根据返回结果创建请求类型
int method= Request.Method.GET;//参1.请求方法 参数2.网络连接的地址 参3.获取数据成功的处理监听器
Response.Listener listener= new Response.Listener<String>() {
//
@Override
public void onResponse(String response) {
//业务:展示给用户
tvResponseString.setText(response);
}
};
//参4.网络处理失败监听器
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//业务:展示组用户网络出错的视图
tvResponseString.setText(">--< 网络出错了"+error.getMessage());
}
};
//返回类型为String请求
//Request:代表一个网络请求
// |--StringRequest 结果是一个String
// |--JsonReqeust 结果就是一个json 字符串
// |--JsonArrayRequest 结果是一个json数据组对象
// |--JSONObject 结果就是一个json对象
// |--ImageRequest 结果是一张图片
StringRequest request=new StringRequest(method,url,listener,errorListener);
//只需添加请求队列里面由队列自行处理
queue.add(request); 案例二: 项目中一般使用它来完成登录 。注册等等。
volley封装代码非常简洁。get post的底层差别是 对请求参数是否进行表单编码。但是在代码上的差异只有两处:
1.参1使用 int method = Request.Method.POST;
2.重写StringRequest的getParams返回表单数据 给底层。
3.不需要处理中文乱码。 [Java] 纯文本查看 复制代码 final TextView tvResponseString = (TextView) findViewById(R.id.activity_main_tv_reponse_string);
//获取应用上下文
VolleyApplication application = (VolleyApplication) this.getApplication();
//返回请求列表
RequestQueue queue = application.getInstance();
Log.i("MainActivity", queue + "");
String url = "http://192.168.1.114:8080/webapi/post";
//Volley把表单参数存在map
final HashMap<String, String> params = new HashMap<>();
// username=hh&password=123
params.put("username", "hh中国");
params.put("password", "123");
//创建String返回类型的请求
//参1.
int method = Request.Method.POST;
//参2.地址
//参3.
Response.Listener<String> listener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//业务 展示
//{"msg":"成功收到信息","data":"45cefcea-4090-4690-bea4-7351f72cd50d"}
try {
JSONObject jsonObject = new JSONObject(response);
String msg = jsonObject.getString("msg");
String data = jsonObject.getString("data");
tvResponseString.setText(msg + " " + data);
} catch (JSONException e) {
e.printStackTrace();
}
}
};
//参4
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
tvResponseString.setText("获取数据失败");
}
};
StringRequest request = new StringRequest(method, url,listener,errorListener){
@Override
protected Map<String, String> getParams() throws AuthFailureError {// 重写getParams() 方法 把参数放到请求里面
return params;//getParams发送请求时把数据取出放入请求里
}
};
//发送
queue.add(request); 案例三.请求类型 volley为了满足项目中的常见数据返回类型提供了Request的几个子类
//Request:代表一个网络请求
// |--StringRequest 结果是一个String
// |--JsonReqeust 结果就是一个json 字符串
// |--JsonArrayRequest 结果是一个json数据组对象
// |--JSONObject 结果就是一个json对象
// |--ImageRequest 结果是一张图片 图片框架课
根据服务端返回的数据类型不同来创建上面的几种请求方式 本例中以服务端返回的是String字符串,以创建的是StringRequest 请求
一般请求类型不同Response.Listener传入参数也不同。 实现代码: [Java] 纯文本查看 复制代码 final TextView tvResponseString= (TextView) findViewById(R.id.activity_main_tv_reponse_string);
//获取应用上下文
VolleyApplication application= (VolleyApplication) this.getApplication();
//返回请求列表
RequestQueue queue=application.getInstance();
Log.i("MainActivity",queue+"");
//创建一个请求
String url="http://192.168.1.114:8080/webapi//get?username=itheima";
//根据返回结果创建请求类型
int method= Request.Method.GET;//参1.请求方法 参数2.网络连接的地址 参3.获取数据成功的处理监听器
Response.Listener<JSONObject> listener= new Response.Listener<JSONObject>() {
//
@Override
public void onResponse(JSONObject response) {
//服务端返回的数据
//{"msg":"成功收到信息","data":{"username":"\"黑马\""}}
try {
String msg= response.getString("msg");
String username= response.getJSONObject("data").getString("username");
//业务:展示给用户
tvResponseString.setText(msg+" "+username);
} catch (JSONException e) {
e.printStackTrace();
}
}
};
//参4.网络处理失败监听器
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//业务:展示组用户网络出错的视图
tvResponseString.setText(">--< 网络出错了"+error.getMessage());
}
};
//返回类型为String请求
//Request:代表一个网络请求
// |--StringRequest 结果是一个String
// |--JsonReqeust 结果就是一个json 字符串
// |--JsonArrayRequest 结果是一个json数据组对象
// |--JSONObject 结果就是一个json对象
// |--ImageRequest 结果是一张图片 图片框架课
// StringRequest request=new StringRequest(method,url,listener,errorListener);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, listener, errorListener);
//只需添加请求队列里面由队列自行处理 把请求放到子线程中处理
queue.add(jsonObjectRequest);
【济南中心】就业面试技巧系列(持续更新中...) (出处: 黑马程序员IT技术论坛)
【济南校区】Android/php/JavaEE课程笔记同步+面试技巧同步更新 (出处: 黑马程序员IT技术论坛)
|