day2 Okhttp

Okhttp

依赖

implementation ‘com.squareup.okhttp3:okhttp:3.12.1’

get+post请求

get请求

OkHttpClient.Builder builder = new OkHttpClient.Builder();
OkHttpClient build = builder.build();
Request.Builder builder1 = new Request.Builder();
builder1.url("");
builder1.get();
Request build1 = builder1.build();
Call call = build.newCall(build1);
call.enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Toast.makeText(Main2Activity.this,e.getMessage()+"",Toast.LENGTH_SHORT).show();
    }

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

post请求

@Override
public void onClick(View v) {
    //TODO 1:client
    OkHttpClient.Builder builder = new OkHttpClient.Builder();

    OkHttpClient client = builder.build();
    //TODO 2:request
    Request.Builder builder1 = new Request.Builder();
    builder1.url("https://www.apiopen.top/login?key=00d91e8e0cca2b76f515926a36db68f5&");
    //TODO 2:请求体 RequestBody是抽象类 实现子类 FormBody
    //phone=13594347817&passwd=123654
    FormBody.Builder builder2 = new FormBody.Builder();
    builder2.add("phone", "13594347817");//用户名
    builder2.add("passwd", "123654");//密码
    FormBody formBody = builder2.build();

    builder1.post(formBody);//设置post请求
    Request request = builder1.build();
    //TODO 3:call:客户端发起请求得到连接
    Call call = client.newCall(request);//连接
    //TODO 4:reaponse
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Toast.makeText(Main2Activity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Toast.makeText(Main2Activity.this, ""+response.body(), Toast.LENGTH_SHORT).show();
        }
    });

}

OkhttpUtils(工具类)

OkhttpListener

public interface OkHttpListener {
    void failur(String str);
    void success(String json);
    void setMax(int position);
    void setCurrent(int position);
}

OkhttpUtils

public class OkhttpUtils {
    OkHttpClient okHttpClient;
    private OkhttpUtils(){
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
         okHttpClient = builder.build();
    };
    private static  OkhttpUtils okhttpUtils=null;
    public  static  OkhttpUtils getInstance(){
        if(okhttpUtils==null){
            synchronized (StringBuilder.class){
                if(okhttpUtils==null){
                    okhttpUtils=new OkhttpUtils();
                }
            }
        }
            return okhttpUtils;
    }
    public void get(String url, final OkHttpListener okHttpListener){
        Request builder = new Request.Builder().url(url).get().build();
        Call call = okHttpClient.newCall(builder);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                okHttpListener.failur(e.getMessage()+"");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                    okHttpListener.success(response.body().string()+"");
            }
        });
    }
    public void post(String url, Map<String,String> map,final OkHttpListener okHttpListener){

        FormBody.Builder builder = new FormBody.Builder();
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry:entries
             ) {
            String key = entry.getKey();
            String value = entry.getValue();
            builder.add(key,value);
        }
        FormBody build = builder.build();
        Request builder1 = new Request.Builder().url(url).post(build).build();

        Call call = okHttpClient.newCall(builder1);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                        okHttpListener.failur(e.getMessage()+"");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                        okHttpListener.success(response.body().string()+"");
            }
        });

    }
    public void download(String str , final String path, final OkHttpListener okHttpListener){
        Request builder = new Request.Builder()
                .url(str)
                .get()
                .build();

        Call call = okHttpClient.newCall(builder);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                okHttpListener.failur(e.getMessage()+"");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ResponseBody body = response.body();
                long max = body.contentLength();
                okHttpListener.setMax((int) max);
                InputStream inputStream = body.byteStream();
                FileOutputStream fileOutputStream = new FileOutputStream(path);
                int len=0;
                byte[] bytes=new byte[1024];
                int count=0;
                while ((len=inputStream.read(bytes))!=-1){
                    fileOutputStream.write(bytes,0,len);
                    count+=len;
                    okHttpListener.setCurrent(count);
                }
                okHttpListener.success(response.body()+"");

            }
        });

    }
  public void upload(final String str,String servername, String type, String path, final OkHttpListener okHttpListener){
    MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
    builder.addFormDataPart("file",servername,RequestBody.create(MediaType.parse(type),new File(path)));

    MultipartBody build = builder.build();
    final Request request = new Request.Builder().url(str).post(build).build();
    Call call = okHttpClient.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            okHttpListener.failur(e.getMessage()+"");
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String string = response.body().string();
            okHttpListener.success(string+"");
        }
    });

}

    }

Log拦截器打印(Interceptor)

private OkhttpUtils(){
    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
        @Override
        public void log(String message) {
            Log.e("########",message+"");
        }
    });
    Interceptor interceptor = new Interceptor() {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request build = chain.request().newBuilder().header("token", "day3okhttp").build();
            return chain.proceed(build);
        }
    };
    httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
//log拦截器一定在token之前
     builder.addInterceptor(httpLoggingInterceptor);
     builder.addInterceptor(interceptor);
    okHttpClient = builder.build();
};
private static  OkhttpUtils okhttpUtils=null;
public  static  OkhttpUtils getInstance(){
    if(okhttpUtils==null){
        synchronized (StringBuilder.class){
            if(okhttpUtils==null){
                okhttpUtils=new OkhttpUtils();
            }
        }
    }
        return okhttpUtils;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OkHttp 是一个用于网络请求的开源库,它可以提高网络请求的性能。Retrofit 是一个基于 OkHttp 的网络请求库,它可以简化网络请求的代码。RxJava 是一个用于在 Android 和 Java 应用程序中进行响应式编程的库。Retrofit2 和 RxJava2 可以结合使用,以提高网络请求的性能和代码的可读性。 ### 回答2: OkHttp、Retrofit2和RxJava2是Android开发中很重要的三个框架。 OkHttp是一个开源的HTTP客户端,使用Java语言开发,支持HTTP/2、SPDY、连接池、缓存等特性。它不仅对Android平台友好,也能在Java虚拟机上运行。OkHttp在网络请求方面表现出色,非常适合于用来处理HTTP请求,它提供了很多重要的功能,例如请求和响应拦截器、响应缓存、连接池和数据压缩等。同时,OkHttp还支持多种网络协议,包括HTTP1/2,SPDY,WS等。 Retrofit2是一个RESTful风格的网络请求库,用于对HTTP请求进行封装和处理。在Retrofit2中,我们可以定义各种接口,使用注解来描述请求和响应,并通过相应的注解来指定请求方式、路径、请求参数等信息。Retrofit2底层依赖OkHttp,两者配合使用效果更佳。Retrofit2支持Gson、Jackson等多种序列化和反序列化的格式,同时支持RxJava2,可以方便地实现异步处理和请求合并。 RxJava2是一个响应式编程库,通过将异步事件传输和不同线程之间切换的过程进行抽象封装,提供了一种更易用的处理异步任务的方式。通过RxJava2,我们可以很方便地处理数据同步、异步以及UI线程和后台线程之间的切换等问题。RxJava2还支持丰富的操作符,例如map、filter等操作符,可以让我们更加方便地处理数据。在Android项目中,我们可以通过RxJava2和Retrofit2配合使用,从而更加优雅地实现异步请求数据的过程。 总的来说,OkHttp、Retrofit2和RxJava2是Android开发中必不可少的三个框架。OkHttp用于网络通信,Retrofit2用于请求数据,而RxJava2用于方便处理异步任务,三者之间相互配合可以极大地提高开发效率和代码质量。 ### 回答3: OkHttp是一个网络请求库,支持HTTP/2和HTTP/1.x协议,可以替代原生HttpURLConnection,具有更好的性能和可扩展性。OkHttp具有强大的请求和响应拦截器,可以轻松地添加自定义头部、日志打印、缓存、重试等功能。 Retrofit2是基于OkHttp封装的一个RESTful API调用库,提供了简洁的API和强大的插件扩展机制。Retrofit2的设计是根据Java注解进行的,通过注解来定义请求的URL,请求的方法,方法参数等,使得代码更加简洁易懂。Retrofit2还支持按需解析响应数据,内置了多种数据解析器,如Gson和Jackson等。 RxJava2是一个函数式编程库,可以方便地实现异步编程和事件流处理。它通过使用Observables和Subscribers以及操作符,使得异步编程更加优雅和易于扩展。在Retrofit2中结合RxJava2使用可以实现更加高效、清晰和方便的异步网络请求和数据处理。 综上所述,OkHttp、Retrofit2和RxJava2联合使用可以实现优秀的网络请求和数据处理的功能,使得代码更加简洁、易于扩展和优化。它们的组合可以为开发者提供更好的开发体验,以及更好的满足现代App对网络请求和数据处理的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值