okhttp用法

转载 2016年08月29日 17:02:23

1.get:

注意回调不是在主线程执行的,所有操作ui要runonuithread

protected void okHttpGet() {
    Request.Builder builder = new Request.
            Builder()
            .url("http://apis.juhe.cn/cook/query?key=4ecde5ed955fadaf85d96529cd98beb4&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF");
    builder.method("GET", null);
    Request request = builder.build();


    client.newCall(request).enqueue(new Callback() {

        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String str = response.body().string();
            Log.d("qf", str);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "ok", Toast.LENGTH_SHORT).show();
                }
            });


        }
    });

}

2.post


protected void okHttpPost() {

    Request.Builder builder = new Request
            .Builder()
            .url("http://apis.juhe.cn/cook/query");
    RequestBody body = new FormBody
            .Builder()
            .add("key", "4ecde5ed955fadaf85d96529cd98beb4")
            .add("menu", "西红柿")
            .build();


    builder.post(body);

    Request request = builder.build();

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

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String str = response.body().string();
            Log.i("zy", str);
        }
    });


}

3.json请求:

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

protected void okHttpPostJson() {

    String url = "http://192.168.1.103/test/rest/rest.php/items";
    String data = "{\"name\":\"Brett3\",\"link\":\"haha2\"}";

    Request.Builder builder = new Request.Builder().url(url);
    RequestBody body = RequestBody.create(JSON, data);
    //builder.post(body);
    builder.method("POST", body);
    Request request = builder.build();

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

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String str = response.body().string();
            Log.i("zy", str);
        }
    });

}

4.下载:

protected void okHttpDownLoad() {

    String url = "http://img.my.csdn.net/uploads/201603/26/1458988468_5804.jpg";
    Request request = new Request.Builder().url(url).build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) {
            InputStream inputStream = response.body().byteStream();
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream(new File("/sdcard/wangshu.jpg"));
                byte[] buffer = new byte[2048];
                int len = 0;
                while ((len = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, len);
                }
                fileOutputStream.flush();
            } catch (IOException e) {
                Log.i("wangshu", "IOException");
                e.printStackTrace();
            }

            Log.d("wangshu", "文件下载成功");
        }
    });
}

5.上传单文件:

上传服务器为github,生成markdown文件,上传一个文件,github这个服务可以对文件中内容按照一定语法进行处理

public static final MediaType MEDIA_TYPE_MARKDOWN
        = MediaType.parse("text/x-markdown; charset=utf-8");

protected void okHttpUpdateFile() {

    File file = new File("/sdcard/DownLoad/bb.txt");
    Request request = new Request.Builder()
            .url("https://api.github.com/markdown/raw")
            .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
            .build();

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

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {

            String str = response.body().string();
            Log.i("zy", str);
        }
    });
}

6.多文件(或多种数据类型)同时上传:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

private void sendMultipart() {
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("title", "wangshu")
            .addFormDataPart("upload_file0"
                    , "wangshu.jpg"
                    , RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg")))
            .build();

    Request request = new Request.Builder()
            .url("http://192.168.1.107/upload.php")
            .post(requestBody)
            .build();

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

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.i("wangshu", response.body().string());
        }
    });
}

7.okhttpclient的初始化设置:

protected void initOkHttpClient() {
    //client = new OkHttpClient();

    File sdcache = getExternalCacheDir();
    int cacheSize = 10 * 1024 * 1024;
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(5, TimeUnit.SECONDS)
            .writeTimeout(5, TimeUnit.SECONDS);
    builder.cache(new Cache(sdcache, cacheSize));
    client = builder.build();

}

8.同步执行:

protected void syncExcute(){
    Request.Builder builder = new Request.
            Builder()
            .url("http://apis.juhe.cn/cook/query?key=4ecde5ed955fadaf85d96529cd98beb4&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF");
    builder.method("GET", null);
    Request request = builder.build();

    try {
        Response response = client.newCall(request).execute();
        String str = response.body().string();
        Log.d("qf",str);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

new Thread(){
    @Override
    public void run() {
        syncExcute();
    }
}.start();





OKHttp的介绍和基本用法

嗨,大家好。又和大家见面了,今天我和大家一起来学习一下OKHttp。      OKHttp是基于Http协议上的网络通讯,说白了就是Http协议。Http的功能OKHttp都有。那就问题来了,既然有...
  • xaingge
  • xaingge
  • 2016年05月25日 20:14
  • 2078

OkHttp使用(一)基本使用

前言          OkHttp是一个高效的HTTP库 Ø  支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求; Ø  如果SPDY不可用,则通过连接池来减少请求延时; Ø ...
  • tangxl2008008
  • tangxl2008008
  • 2016年06月21日 21:17
  • 23858

Okhttp的简单介绍和使用(一)

通过本篇可以了解到: 1、okhttp是什么 2、okhttp的优点 3、okhttp的简单使用
  • wuyinlei
  • wuyinlei
  • 2016年01月25日 13:47
  • 11493

Android网络编程(六)OkHttp3用法全解析

上一篇介绍了OkHttp2.x的用法,这一篇文章我们来对照OkHttp2.x版本来看看,OkHttp3使用起来有那些变化。当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp...
  • itachi85
  • itachi85
  • 2016年04月21日 12:26
  • 100568

Android,okHttp的用法,网络请求

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47911083; 本文出自:【张鸿洋的博客】...
  • qq_37043246
  • qq_37043246
  • 2017年04月19日 11:51
  • 598

Android的Okhttp框架之post、get用法讲解(落雨敏)

前言:okhttp作为Android主流网络框架之一,但在近日okhttp网络请求却比较火,主要原因是在谷歌官方在6.0以后在Android sdk已经移除了httpClient,加入我们okHttp...
  • lin857
  • lin857
  • 2017年01月23日 16:36
  • 583

Android的OkHttp包中的HTTP拦截器Interceptor用法示例

拦截器是OkHttp处理HTTP请求方面所具有的一个强大特性,这里我们就来看一下Android的OkHttp包中的HTTP拦截器Interceptor用法示例,需要的朋友可以参考下: OkHttp(G...
  • cw2004100021124
  • cw2004100021124
  • 2016年10月17日 16:41
  • 2420

Android的OkHttp包中的HTTP拦截器Interceptor用法示例

拦截器是OkHttp处理HTTP请求方面所具有的一个强大特性,这里我们就来看一下Android的OkHttp包中的HTTP拦截器Interceptor用法示例,需要的朋友可以参考下: OkHttp(...
  • github_36118046
  • github_36118046
  • 2016年10月19日 09:34
  • 382

okHttp3的用法及介绍

1.okhttp官网地址:http://square.github.io/okhttp/ 2. github中okhttp的链接路径[https://github.com/square/okhttp...
  • guanyueliuxing
  • guanyueliuxing
  • 2016年12月17日 12:22
  • 130

OKHttp3用法介绍

OKHttp3用法介绍 我们把用http协议通讯的双方称作Client和Server,Client发送request请求,Server收到请求后处理并返回Client一个response. 接...
  • jett2357
  • jett2357
  • 2017年05月08日 15:19
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:okhttp用法
举报原因:
原因补充:

(最多只允许输入30个字)