Volley
1.Volley是对HTTP通信的再简化操作
2.Volley适合通信量不大但是特别频繁的场景
3.在android studio中要导入volley的jar包,导入方法是:
Project Structure→Dependencies→+→选择第一个→在搜索框中输入volley→选择第一个点击OK就可以了
4.Volley的逻辑图是
5.实现Volley的代码如下,并且顺带把ImageLoader也写了进去
public class VolleyActivity extends AppCompatActivity implements View.OnClickListener{
private Button mBtnVolley;
private TextView mTextView;
private Button mBtnNetImage;
private NetworkImageView mNetworkImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley);
mNetworkImageView= (NetworkImageView) findViewById(R.id.net_iamgeview);
mTextView= (TextView) findViewById(R.id.textview_volley);
mBtnVolley= (Button) findViewById(R.id.button_volley_test);
mBtnNetImage= (Button) findViewById(R.id.button_net_image);
mBtnVolley.setOnClickListener(this);
mBtnNetImage.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_volley_test:
//四个参数,第一个是设置请求方法,第二个是url,第三个是返回鉴定并返回结果,第四个是错误返回监听
StringRequest request=new StringRequest(Request.Method.POST, "http://192.168.0.103:8080/ElevenAugMyServer/MyServerLet", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mTextView.setText(response);//将返回的信息显示在TextView上
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("网络连接错误");//将错误的信息返回到TextView上
}
}){
//Post方法中才可以用,Get方法不需要用到该方法
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> map=new HashMap<>();
map.put("username","Forrest");//添加提交的信息
return map;
}
};
//将RequestQueue单例,并将add方法也写到里面
MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);
break;
case R.id.button_net_image:
//将单例的ImageLoader只设置一个get方法来得到ImageLoader
mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png",MySingleton.getInstance(this).getImageLoader());
break;
default:
break;
}
}
}
单例的代码是
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
//构建一个私有的构造器
private MySingleton(final Context context){
mCtx=context;
mRequestQueue = getRequestQueue();//初始化RequestQueue
//单例ImageLoader
mImageLoader=new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
private final LruCache<String,Bitmap> cache=new LruCache<>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
});
}
//提供一个公开的方法
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
//只创建一个新的RequestQueue
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
//重写了RequestQueue的add方法其中<T>指的泛型
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
xUtils
1.xUtils的http非常简单,只需要创建一个新的对象,然后调用send()方法,监听成功和失败的返回,下面是简单的DoGet方法和DoPost方法
2.可以进行注解模式的开发,这样可以节省很多的代码量,必须要调用ViewUtils.inject(this);
public class XUtilsActivity extends AppCompatActivity implements View.OnClickListener{
//注解开发模式
@ViewInject(R.id.button_xutils_test)//相当于找到id将id这个int值赋值给button
private Button mBtnXutils;
@ViewInject(R.id.button_xutils_post)
private Button mBtnXutilsDoPost;
@ViewInject(R.id.textview_xutils)
private TextView mTextViewXutils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xutils);
// mTextViewXutils= (TextView) findViewById(R.id.textview_xutils);
ViewUtils.inject(this);//必须要加上这一句话才可以进行注解
// mBtnXutils= (Button) findViewById(R.id.button_xutils_test);
// mBtnXutilsDoPost= (Button) findViewById(R.id.button_xutils_post);
// mBtnXutils.setOnClickListener(this);
// mBtnXutilsDoPost.setOnClickListener(this);
}
@OnClick({R.id.button_xutils_test,R.id.button_xutils_post})//注解开发模式需要导入xUtils包
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_xutils_test:
HttpDoGet();
break;
case R.id.button_xutils_post:
HttpDoPost();
break;
default:
break;
}
}
private void HttpDoPost() {
HttpUtils client=new HttpUtils();//创建一个新的HttpUtils对象
RequestParams params=new RequestParams();//创建一个新的请求参数列表
params.addBodyParameter("username","Forrest");//添加参数
//send方法中有4个参数,第一个参数是设置提交方法,可以设置为GET和POST方法,第二个参数传入url,第三个参数传入提交的数据,第四个是返回监听
client.send(HttpRequest.HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", params, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
mTextViewXutils.setText(responseInfo.result);//将返回的结果放到TextView上
}
@Override
public void onFailure(HttpException e, String s) {
mTextViewXutils.setText("网络连接错误");
}
});
return;
}
private void HttpDoGet() {
HttpUtils client=new HttpUtils();//创建一个新的HttpUtils对象
//send方法中的3个参数分别表示:第一个是设置为GET方法,第二个传入url,第三个是返回监听
client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
mTextViewXutils.setText(responseInfo.result);//将放回结果放到TextView中显示
}
@Override
public void onFailure(HttpException e, String s) {
mTextViewXutils.setText("网络连接错误");
}
});
}
}