Xutils3.0与之前的版本变化较大,老版本的xutils是用的是httpclient,但是xutils3.0则是使用HttpUrlConnection.
新版本3.0在使用之前必须初始化,建议把初始化工作放在继承自application的文件中,如下所示:
x.Ext.init(this);
初始化工作完成之后,则可以获取xutils3.0内置的方法进行操作了,使用xutils3.0中的方法,全是是通过 “x” 来进行的。
当设置好网络获取权限之后,让我们来先进行下载数据:
public static void getJsonString(String s, Map<String,String> map){
RequestParams params = new RequestParams(s);
if (map != null) {
key = map.keySet();
Set<Map.Entry<String,String>> entry = map.entrySet();
for (Map.Entry<String,String> e : entry) {
params.addBodyParameter(e.getKey(),e.getValue());
}
}
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
netInterface.jsonDataString(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.d("forme","onError");
}
@Override
public void onCancelled(CancelledException cex) {
Log.d("forme","onCancelled");
}
@Override
public void onFinished() {
Log.d("forme","onFinished");
}
});
}
上面使用的是get请求,可以直接拿到项目中使用,该方法可以接受多个参数。所需要的参数通过Map集合赋值给RequestParams中的addBodyParameter来添加,一般字符串参数通过此方法就可以了,如果是对象,则需要addParameter来添加。请求成功则会调用onSuccess方法。result参数表示从服务器获取的数据。
Post下载数据的写法同Get一样,仅仅把get换成post就可以。
下面演示使用post上传数据到服务器
public static void register(String url,String key,JSONObject value){
RequestParams params = new RequestParams(url);
params.addParameter(key,value);
x.http().request(HttpMethod.POST, params, new Callback.CommonCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
netInterface.jsonDataString(String.valueOf(result));
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
上面的方法,作用是上传一个json对象到服务器中,并接收返回值。同样Get请求,仅需把POST更换成GET即可。
下面使用Post来下载apk并自动安装
privatevoiddownload(View v){
url = "http://127.0.0.1/server/ABC.apk";
RequestParams params = newRequestParams(url);
//自定义保存路径,Environment.getExternalStorageDirectory():SD卡的根目录
params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/myapp/");
//自动为文件命名
params.setAutoRename(true);
x.http().post(params, newCallback.ProgressCallback<file>() {
@Override
publicvoidonSuccess(File result) {
//apk下载完成后,调用系统的安装方法
Intent intent = newIntent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive");
getActivity().startActivity(intent);
}
@Override
publicvoidonError(Throwable ex, booleanisOnCallback) {
}
@Override
publicvoidonCancelled(CancelledException cex) {
}
@Override
publicvoidonFinished() {
}
//网络请求之前回调
@Override
publicvoidonWaiting() {
}
//网络请求开始的时候回调
@Override
publicvoidonStarted() {
}
//下载的时候不断回调的方法
@Override
publicvoidonLoading(longtotal, longcurrent, booleanisDownloading) {
//当前进度和文件总大小
Log.i("JAVA","current:"+ current +",total:"+total);
}
});
}