Okhttp学习及封装

Okhttp学习及封装Okhttp1.学习Okhttp2.OkHttp的封装1.学习Okhttp需要导入依赖implementation’com.squareup.okhttp3:okhttp:3.12.1’四个按钮需要写入布局get请求,post请求,下载文件,上传文件别忘了加入SD卡权限,网络权限privatevoidinitView(){get=(Button)…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1.学习Okhttp

需要导入依赖

 implementation 'com.squareup.okhttp3:okhttp:3.12.1'

四个按钮需要写入布局
get请求,post请求,下载文件,上传文件
别忘了加入SD卡权限,网络权限

  private void initView() { 
   
        get = (Button) findViewById(R.id.get);
        post = (Button) findViewById(R.id.post);
        progressBar = (ProgressBar) findViewById(R.id.progress_bar);



        get.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View v) { 
   

                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(50, TimeUnit.SECONDS)
                        .readTimeout(50, TimeUnit.SECONDS)
                        .build();

                Request request = new Request.Builder()
                        .url("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1")
                        .build();


                Call call = client.newCall(request);

                call.enqueue(new Callback() { 
   
                    @Override
                    public void onFailure(Call call, final IOException e) { 
   
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, e.getMessage() + "", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException { 
   
                        final String string = response.body().string();
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, string + "", Toast.LENGTH_SHORT).show();
                            }
                        });

                    }
                });


            }
        });


        post.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View v) { 
   
                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(50, TimeUnit.SECONDS)
                        .readTimeout(50, TimeUnit.SECONDS)
                        .build();


                FormBody formBody = new FormBody.Builder()
                        .add("page", "1")
                        .build();


                Request request = new Request.Builder()
                        .url("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&")
                        .post(formBody)
                        .build();


                Call call = client.newCall(request);
                call.enqueue(new Callback() { 
   
                    @Override
                    public void onFailure(Call call, final IOException e) { 
   
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, e.getMessage() + "", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException { 
   
                        final String string = response.body().string();
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, string + "", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });
            }
        });

        download = (Button) findViewById(R.id.download);


        download.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View v) { 
   
                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(50, TimeUnit.SECONDS)
                        .readTimeout(50, TimeUnit.SECONDS)
                        .build();

                Request request = new Request.Builder()
                        .url("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4")
                        .build();


                Call call = client.newCall(request);

                call.enqueue(new Callback() { 
   
                    @Override
                    public void onFailure(Call call, final IOException e) { 
   
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, e.getMessage() + "", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException { 
   
                        ResponseBody body = response.body();
                        maxlen = body.contentLength();

                        InputStream is = body.byteStream();
                        File file = Environment.getExternalStorageDirectory();
                        FileOutputStream fos = new FileOutputStream(new File(file, "猩猩.mp4"));
                        int len = 0;
                        byte[] b = new byte[1024];
                        long carlen = 0;
                        while ((len = is.read(b)) != -1) { 
   
                            fos.write(b, 0, len);

                            carlen += len;
                            int progress = (int) (carlen * 100 / maxlen);
                            progressBar.setProgress(progress);
                        }
                    }
                });
            }
        });

        Upload = (Button) findViewById(R.id.Upload);


        Upload.setOnClickListener(new View.OnClickListener() { 
   
            @Override
            public void onClick(View v) { 
   
                OkHttpClient client = new OkHttpClient.Builder()
                        .connectTimeout(50, TimeUnit.SECONDS)
                        .readTimeout(50, TimeUnit.SECONDS)
                        .build();

                File file = Environment.getExternalStorageDirectory();
                RequestBody requestBody = RequestBody.create(MediaType.parse("media/mp4"), new File(file, "猩猩.mp4"));



                MultipartBody multipartBody = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("file","xingxing.mp4",requestBody)
                        .build();


                Request request = new Request.Builder()
                        .url("http://169.254.141.30/hfs/")
                        .post(multipartBody)
                        .build();


                Call call = client.newCall(request);
                call.enqueue(new Callback() { 
   
                    @Override
                    public void onFailure(Call call, final IOException e) { 
   
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this, e.getMessage() + "", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException { 
   
                        handler.post(new Runnable() { 
   
                            @Override
                            public void run() { 
   
                                Toast.makeText(MainActivity.this,   "上传成功", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });
            }
        });

    }

2.OkHttp的封装

代码之路很艰辛,依照上面的方法我们不能重复写的代码
可一给他封装一个工具类
我们用到了单利模式
主类直接调用就行

   private OkHttpClient client;
    private Handler handler=new Handler();

    private MyOkUtiles() { 
   
         client = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();
    }

    private static MyOkUtiles myOkUtiles=null;


    public static MyOkUtiles getInstance(){ 
   
        if (myOkUtiles==null){ 
   
            synchronized (Object.class){ 
   
                if (myOkUtiles==null){ 
   
                    myOkUtiles=new MyOkUtiles();
                }
            }
        }
        return myOkUtiles;
    }


    public void get(String url, final MyOkListener myOkListener){ 
   

        Request request = new Request.Builder()
                .url(url)
                .get().build();

        client.newCall(request).enqueue(new Callback() { 
   
            @Override
            public void onFailure(Call call, IOException e) { 
   
                final String message = e.getMessage();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myOkListener.MyError(message);
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException { 
   
                final String string = response.body().string();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myOkListener.MyOk(string);
                    }
                });
            }
        });
    }

    public void post(String url, HashMap<String,String> map, final MyOkListener myOkListener){ 
   
        FormBody.Builder builder = new FormBody.Builder();
        HashMap<String, String> maps = new HashMap<>();
        Set<Map.Entry<String, String>> entries = maps.entrySet();
        for (Map.Entry<String, String> entry : entries) { 
   
            builder.add(entry.getKey(),entry.getValue());
        }

        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();


        client.newCall(request).enqueue(new Callback() { 
   
            @Override
            public void onFailure(Call call, IOException e) { 
   
                final String message = e.getMessage();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myOkListener.MyError(message);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException { 
   
                final String string = response.body().string();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myOkListener.MyOk(string);
                    }
                });
            }
        });

    }


    public void download(String url, final String path, final MyProgressListener myProgressListener){ 
   

        Request request = new Request.Builder()
                .url(url)
                .get().build();


        client.newCall(request).enqueue(new Callback() { 
   
            @Override
            public void onFailure(Call call, IOException e) { 
   
                final String message = e.getMessage();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                       myProgressListener.MyError(message);
                    }
                });
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException { 
   
                ResponseBody body = response.body();
                final long maxLen = body.contentLength();
                InputStream is = body.byteStream();

                FileOutputStream fos = new FileOutputStream(path);
                int len=0;
                byte[] b = new byte[1024];
                long carlen=0;
                while ((len=is.read(b))!=-1){ 
   
                     fos.write(b,0,len);

                     carlen+=len;
                     final int progress= (int) (carlen*100/maxLen);
                     handler.post(new Runnable() { 
   
                         @Override
                         public void run() { 
   
                             myProgressListener.Progress(progress);
                         }
                     });
                }

                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myProgressListener.Finish();
                    }
                });
            }
        });
    }


    public void upload(String url, String path, String servername, String type, final MyOkListener myOkListener){ 
   


        RequestBody requestBody = RequestBody.create(MediaType.parse(type), new File(path));

        MultipartBody multipartBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("file", servername, requestBody)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(multipartBody)
                .build();



        client.newCall(request).enqueue(new Callback() { 
   
            @Override
            public void onFailure(Call call, IOException e) { 
   
                final String message = e.getMessage();
                handler.post(new Runnable() { 
   
                    @Override
                    public void run() { 
   
                        myOkListener.MyError(message);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException { 
   
                if (response.isSuccessful()) { 
   
                    handler.post(new Runnable() { 
   
                        @Override
                        public void run() { 
   
                           myOkListener.MyOk("成功");
                        }
                    });
                }else { 
   
                    handler.post(new Runnable() { 
   
                        @Override
                        public void run() { 
   
                            myOkListener.MyOk("失败");
                        }
                    });
                }
            }
        });


    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180465.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstorm2021.11 激活【2021免费激活】「建议收藏」

    (phpstorm2021.11 激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0E14HXZ4QL-eyJsaWN…

    2022年3月29日
    86
  • 忘记密码?不存在的, 教你如何使用python 暴力破解

    忘记密码?不存在的, 教你如何使用python 暴力破解

    2021年9月18日
    60
  • BitBlt介绍

    BitBlt介绍

    2021年12月10日
    53
  • getElementById获取元素

    getElementById获取元素<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><metahttp-equiv=”X-UA-Compatible”content=”ie=edge”><title>D.

    2022年7月15日
    19
  • 代码生成器原理及示例

    在三层架构中Model、DAL、BLL层有必要分开,其中有些代码可以由代码生成器生成。虽然网络已经有成熟的代码生成器,但是掌握代码生成器的编写方法、原理还是很有必要的。下面通过一个例子简要介绍代码生成器编写过程,并给出一个具备基本功能的范例雏形。以抛砖引玉。

    2022年4月9日
    50
  • pycharm界面改为中文,中英文切换「建议收藏」

    pycharm界面改为中文,中英文切换「建议收藏」打开pycharm,选择“plugins”(插件)。在plugins市场的搜索框,输入“chinese”选择第二个插件,点击插件后面的安装按钮“install”,会自己安装,安装好后,软件会要求重新启动,点击确定即可。重启后就可以显示为中文界面了。如果不想用中文,想改回去也很容易。选择“plugins”,然后在右侧的窗口,选择“已安装”,可以看到所有安装的插件,将安装的中文插件的右侧的勾选框点掉,然后点击其他处,软件会提示重启,点击确定即可。…

    2022年8月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号