最近几天学习了好多种网络连接的方式,为了更好地区分他们,这里简单说明一下,所有的网络连接都是基于我们的TCP/IP模式进行的,从开始的URLConnection到HttpUrlconnection、HttpClient、Volley、HttpUtils全部都是。其中HttpUrlconnection、HttpClient是apache推出的封装类,但是二者在Android上不很适合,goole之后就抛弃了这两种方法,在2013年推出了Volley,Volley对上面的两种连接进行了进一步封装,使它本身的使用上更加简洁。但是上面三种方式都不支持大文件的上与下载因此又出现了HttpUtils。
1、xUtils详细介绍
2、说明:
●xUtils 包含了很多实用的android工具。
●xUitls 最低兼容android 2.2 (api level 8)
●xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…
3、注意:在使用HttpU的时候要导入jar包(可以从忘上下载到)
(1)Eclipse:直接将jar包复制到libs目录下
(2)Android Studio:app—>open Module settings—>Dependencies—>+ 把包导入就可以了
由于HttpUtils 是再一次进行封装过的,因此使用起来十分方便。HttpUtils 的GET与POST的都只需要两行代码。
在RequestCallBack中还要实现它的两个方法(连接成功与连接失败)。
HttpUtils util=new HttpUtils();
util.send(Method, url,new RequestCallBack<T>(){});
HttpUtils client =new HttpUtils();
client.send(Method, url,params, new RequestCallBack<String>() {});
注:post方法中传递的参数params需要我们自己new一个RequestParams
RequestParams params=new RequestParams();
params.addBodyParameter(K,V);
HttpUtils util=new HttpUtils();
util.send(HttpMethod.GET, "http://www.baidu.com",new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> arg0) {
medit_content.setText(arg0.result);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
medit_content.setText(arg0.toString());
}
});
HttpUtils client =new HttpUtils();
RequestParams params=new RequestParams();
params.addBodyParameter("username","哈哈");
client.send(HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet",params, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
medit_content.setText(arg0.toString());
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
medit_content.setText(arg0.result);
}
});
HttpUtils 的注解帮我们省掉了findViewById();和监听点击事件,帮我们简化了许多代码,在本文开始部分给出的官方的实例里面我们也可以看到注解的使用方式。
示例:
(1)将要寻找的view进行注解
@ViewInject (R.id.btn_util_con)
private Button btn_xutil_con_get;
@ViewInject(R.id.btn_util_con_post)
private Button btn_xutil_con_post;
(2)在onCreate方法中添加下面一行代码就可以代替所有的findViewById() 了
ViewUtils.inject(this);
在onClick方法上面写上下面的注解代替setOnClickListener的监听事件
@OnClick({R.id.btn_util_con,R.id.btn_util_con_post})
public class XUtil_http extends Activity implements OnClickListener{
@ViewInject (R.id.btn_util_con)
private Button btn_xutil_con_get;
@ViewInject(R.id.btn_util_con_post)
private Button btn_xutil_con_post;
@ViewInject(R.id.textview_xutil)
private TextView medit_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xutil);
ViewUtils.inject(this);
// btn_xutil_con_get.setOnClickListener(this);
// btn_xutil_con_post.setOnClickListener(this);
}
@OnClick({R.id.btn_util_con,R.id.btn_util_con_post})
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_util_con:
HttpUtils util=new HttpUtils();
util.send(HttpMethod.GET, "http://www.baidu.com",new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> arg0) {
medit_content.setText(arg0.result);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
medit_content.setText(arg0.toString());
}
});
break;
case R.id.btn_util_con_post:
doPost();
break;
default:
break;
}
}
private void doPost() {
HttpUtils client =new HttpUtils();
RequestParams params=new RequestParams();
params.addBodyParameter("username","哈哈");
client.send(HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet",params, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
medit_content.setText(arg0.toString());
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
medit_content.setText(arg0.result);
}
});
}
}