Android OKHTTP 请求.上传.下载

导包:

compile 'com.squareup.okhttp3:okhttp:3.9.0'
权限:(联网.读.写)

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

请求:get

  public void btnForGet(View view) {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .get()
                .url("http://apicloud.mob.com/v1/cook/category/query?key=20a62b62d01c0")
                .build();
        Call call = okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //当请求失败的时候,这个方法会被执行
                System.out.println("请求失败 : " + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //当请求成功,该方法会被执行
                String result = response.body().string();
                System.out.println("异步请求结果 : " + result);
            }
        });


        //同步请求
//        new Thread(){
//            @Override
//            public void run() {
//                try {
//                    //创建Okhttpclient对象
//                    OkHttpClient okHttpClient = new OkHttpClient();
//                    Request request = new Request.Builder()
//                            .get()//get请求
//                            .url("http://apicloud.mob.com/v1/cook/category/query?key=20a62b62d01c0")
//                            .build();
//                    //配置请求相关参数
//                    Call call = okHttpClient.newCall(request);
//                    //服务器返回的响应对象
//                    Response response = call.execute();
//
//                    String result = response.body().string();
//
//                    System.out.println("结果 : "+result);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        }.start();
    }


请求:post

 public void btnForPost(View view) {

        OkHttpClient okHttpClient = new OkHttpClient();

        //构建一个请求体
        FormBody body = new FormBody.Builder()
                .add("mobile", "13654897654")
                .add("password", "123456")
                .build();
        //构建请求项
        Request request = new Request.Builder()
                .post(body)
                .url("http://120.27.23.105/user/login")
                .build();


        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //请求失败,会被执行
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //请求成功的时候会被执行

                //得到服务器返回的请求结果
                String result = response.body().string();

                System.out.println("post异步请求 : " + result);

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //切到主线程
                    }
                });
            }
        });
    }


上传1:

 public void btnOnUpload(View view) {
        upFile();
    }

    private void upFile() {
    /* 第一个要上传的file */
        File file1 = new File("/storage/emulated/0/Pictures/Screenshots/a.png");
        RequestBody fileBody1 = RequestBody.create(MediaType.parse("application/octet-stream"), file1);
        String file1Name = "testFile1.txt";
        boolean exists = file1.exists();
        Log.d("MainActivity", "exists:" + exists);
        Log.d("MainActivity", "file1:" + file1);
    
    /* form的分割线,自己定义 */
        String boundary = "xx--------------------------------------------------------------xx";

        MultipartBody mBody = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM)
            /* 上传一个普通的String参数 , key 叫 "p" */
                .addFormDataPart("p", "你大爷666")
            /* 底下是上传了两个文件 */
                .addFormDataPart("file", file1Name, fileBody1)
                .build();

    /* 下边的就和post一样了 */
        OkHttpClient okHttpClient = new OkHttpClient();
        //http://120.27.23.105/file/upload
        Request request = new Request.Builder().url("http://120.27.23.105/file/upload").post(mBody).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            public void onResponse(Call call, Response response) throws IOException {
                final String bodyStr = response.body().string();
                final boolean ok = response.isSuccessful();
                runOnUiThread(new Runnable() {
                    public void run() {
                        if (ok) {
                            Toast.makeText(MainActivity.this, bodyStr, Toast.LENGTH_SHORT).show();
                            Log.d("MainActivity", "成功");
                        } else {
                            Log.d("MainActivity", "成功2");
                            Toast.makeText(MainActivity.this, "server error : " + bodyStr, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }

            public void onFailure(Call call, final IOException e) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        Log.d("MainActivity", "错误");
                        Toast.makeText(MainActivity.this, "错误" + e.toString(), Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }

上传2:

  //作业上传
    public void btnOnUpload(View view){

        upLoadFile();
    }

    /**
     * 上传文件
     */
    private void upLoadFile(){
        OkHttpClient okHttpClient = new OkHttpClient();
        MultipartBody body = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)//设置类型 以表单的形式提交
                .addFormDataPart("uid","3577")
                //create  medieaType : 上传文件类型  path : 上传的文件路劲
                .addFormDataPart("file","img.png",RequestBody.create(MediaType.parse("img/png")
					,new File(Environment.getExternalStorageDirectory(),"img.png")))
                .build();

        Request request = new Request.Builder()
                .post(body)
                .url("http://120.27.23.105/file/upload")
                .build();

        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                //失败
                System.out.println("失败");
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {

                System.out.println("上传消息 : "+response.body().string());
            }
        });
    }




下载:

 //下载操作
    public void btnDownload(View view) {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url("http://msoftdl.360.cn/mobile/shouji360/360safesis/198227/360MobileSafe_7.7.3.1016.apk")//下载地址
                .get()
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //失败f
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //成功
                //思路:从服务器上来 -> 下载到本地(sdcard)
                //得到服务响应过来的IO流
                InputStream is = response.body().byteStream();
                //读取流里面的内容,写到sdcard
                byte[] buffer = new byte[1024];
                int len = 0;
                File file = new File(Environment.getExternalStorageDirectory(), "Mobliesafe_360.apk");
                FileOutputStream fos = new FileOutputStream(file);
                while ((len = is.read(buffer)) != -1) {
                    //数据已经写到了输出流
                    fos.write(buffer, 0, len);
                    fos.flush();
                }
                fos.close();
                is.close();
                System.out.println("下载成功");
            }
        });
    }


















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值