使用Xutils3.0 进行上传和下载数据

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 map){
        RequestParams params = new RequestParams(s);
        if (map != null) {
            key = map.keySet();
            Set> entry =  map.entrySet();
            for (Map.Entry e : entry) {
                params.addBodyParameter(e.getKey(),e.getValue());
            }
        }
        x.http().get(params, new Callback.CommonCallback() {
            @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() {
            @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() {
        @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);
        }
    });
}



你可能感兴趣的:(Android学习)