简单使用Okgo上传下载文件

 

okgo概念性的东西我就不赘述了,百度一大堆,直接上具体的使用过程。

首先引入依赖:

implementation 'com.lzy.net:okgo:+'

我不知道这个版本号,所以直接用+来获取最新版本了。

引入依赖后需要在Application中初始化:

OkGo.getInstance().init(this);

摒弃所有花里胡哨的操作,要在application的oncreate()方法中初始化okgo就可以了。

因为上一篇已经开启了本地服务器了,所以这里就直接使用本地服务器的地址了。使用NanoHttpd在Android项目中搭建服务器,需要在项目中搭建服务器的可以去了解一下哈,虽然写得有点水。

上传功能:

  String serverIP = getIpAddress();//获取本机ip地址
String strDBPath = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS-Smarthome/" + choose + "/" + (choose + ".db3");//数据库地址
            final String strDBPath2 = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS-Smarthome/" + "upload/";//文件上传的路径
            String urlNano = "http://" + serverIP + ":8080";    //8080nanohttpd的端口号
            File file = new File(strDBPath);//实例化数据库文件
            List<File> fileList = new ArrayList<File>();//添加到arraylist里面
            fileList.add(file);//把文件添加到Filelist中

//        }
//            File fileTest = new File("/sdcard/xda.txt");



            //post上传文件
            OkGo.<File>post(/*url*/urlNano)
//                    .tag(DatabaseSelectUpload.class)
//                    .headers("header1", "headerValue1")
//                    .params("db3",file)
//                    .isMultipart(true)
//                    .params("securityCode",pblvariables.security_code)/*验证码*/
//                    .params("Remark",choose)/*数据库名称*/
//                    .upFile(file/*fileTest*/)       /*使用up开头的方法 所有的params设置的参数将丢失 所以两种方法不能混用 */
                    .addFileParams("fileOfdatabase",fileList)
                    .execute(new FileCallback(strDBPath2,choose+".db3") {//指定上传的路径 上传的文件名
                         @Override
                        public void onSuccess(Response<File> response) {
                             //UI线程 ,请求成功后回调
                             handleResponse(response);// 该方法能够显示成功时的请求状态,请求头,响应数据以及响应头信息
                             File result = response.body(); // 获取数据
                             Log.i("randomcode","上传成功1 " + result);
                             Toast.makeText(DatabaseSelectUpload.this,"Success!",Toast.LENGTH_SHORT).show();

                         }

                        @Override
                        public void onError(Response<File> response) {
                            super.onError(response);
                            //UI线程 ,请求失败后回调
                            Log.i("randomcode","上传失败1 " + response.body());
                            Toast.makeText(DatabaseSelectUpload.this,"Fail!",Toast.LENGTH_SHORT).show();
                        }


                        @Override
                        public void onFinish() {
                            super.onFinish();
                            //UI线程 ,请求结束后回调,无论网络请求还是失败都会调用
                            finish();//结束当前页面
                        }
                    });

我上面传入的serverip地址是设备的ip,也就是说访问的是局域网内的服务器。获取方法百度一堆,懒的找的直接复制下面这个方法:

 /**
     * @Title: getIpAddress
     *
     * @Description: 获取设备ip地址
     *
     * @return String
     */
    public static String getIpAddress() {
        try {
            for (Enumeration<NetworkInterface> enNetI = NetworkInterface.getNetworkInterfaces(); enNetI
                    .hasMoreElements();) {
                NetworkInterface netI = enNetI.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = netI.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (inetAddress instanceof Inet4Address &&!inetAddress.isLoopbackAddress()) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return "";
    }

下载功能:

private void downLoadDatabase() {
 final String choose = DatabaseSelectUpload.name_.get(0);//这里给个写死的名称 真实的自己获取或者设置
        String serverIP = getIpAddress();
        String url = "http://" + serverIP + ":8080";
         String strDBPath3 = MyApplication.GetApp().getExternalFilesDir(null) + "/TIS- Smarthome/"+"download";//下载路径
  OkGo.<File>get(url)
                /*.tag(this)
                .headers("header1", "headerValue1")
                .params("db3", String.valueOf(new File(strDBPath)))
                    .params("securityCode",pblvariables.security_code)*//*验证码*//*
                    .params("Remark",choose)*//*数据库名称*/
                .execute(new FileCallback(strDBPath3,choose/*+"_1"*/+".db3") {   //指定下载的路径  下载文件名
                    @Override
                    public void onSuccess(Response<File> response) {
                        Toast.makeText(TransferActivity.this,"dowmload database success",Toast.LENGTH_SHORT).show();
                        Log.i("randomcode","下载成功1 " + response.body());
  }

                    @Override
                    public void onError(Response<File> response) {
                        super.onError(response);
                        Toast.makeText(TransferActivity.this,"dowmload database fail",Toast.LENGTH_SHORT).show();
                        Log.i("randomcode","下载失败1 " + response.body());
                    }
                });
}

 

 这样就完事了,url就是你的服务器地址。可指定上传下载的路径和文件名称。运行程序,成功的话会在对应目录下找到上传下载的文件。

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值