package com.yoo.summary.http.base;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import com.yoo.summary.R;import java.io.File;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.Headers;import okhttp3.Interceptor;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;import okhttp3.ResponseBody;import okio.BufferedSink;/** * 作 者:zhoujianan * 版 本:v1.0 * 创建日期:2019/9/16 * 描 述: */public class OkHttpActivity extends AppCompatActivity {    private static final String TAG = "OkHttpActivity";    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_okhttp);        OkHttpHelper.init(this);        initListener();    }    private void initListener() {        findViewById(R.id.request_tv).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                getWithInterceptor();            }        });    }    //同步方式请求    public void getExample1() {        String url = "http://www.baidu.com";        Request request = new Request.Builder()                .url(url)                .get()                .build();        new Thread(new Runnable() {            @Override            public void run() {                try {                    Response response = new OkHttpClient().newCall(request).execute();                    if (response.isSuccessful()) {                        Log.i(TAG, "response success  :%s " + response.body().string());                    } else {                        Log.i(TAG, "response failed ");                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }    //异步方式请求    public void getExample2() {        String url = "http://www.baidu.com";        Request request = new Request.Builder()                .url(url)                .get()//默认是get请求,可以不写。                .build();        new OkHttpClient().newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.d(TAG, "response success  :%s " + response.body().string());            }        });    }    //post方式提交String    public void postString() {        MediaType mediaType = MediaType.parse("text/x-markdown; charset=utf-8");        String requestBody = "I am String.";        Request request = new Request.Builder()                .url("https://api.github.com/markdown/raw")                .post(RequestBody.create(mediaType, requestBody))                .build();        OkHttpClient okHttpClient = new OkHttpClient();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.d(TAG, response.protocol() + " " + response.code() + " " + response.message());                Headers headers = response.headers();                for (int i = 0; i < headers.size(); i++) {                    Log.d(TAG, headers.name(i) + ":" + headers.value(i));                }                Log.d(TAG, "onResponse: " + response.body().string());            }        });    }    //post方式提交流    public void postBuffer() {        RequestBody requestBody = new RequestBody() {            @Nullable            @Override            public MediaType contentType() {                return MediaType.parse("text/x-markdown;charset=utf-8");            }            @Override            public void writeTo(BufferedSink sink) throws IOException {                sink.writeUtf8("I am Buffer.");            }        };        Request request = new Request.Builder()                .url("https://api.github.com/markdown/raw")                .post(requestBody)                .build();        OkHttpClient client = new OkHttpClient();        client.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.d(TAG, "onResponse: " + response.protocol() + " " + response.code() + " " + response.message());                Headers headers = response.headers();                for (int i = 0; i < headers.size(); i++) {                    Log.d(TAG, headers.name(i) + ":" + headers.value(i));                }                Log.d(TAG, "onResponse: " + response.body().string());            }        });    }    //提交表单,but....以下该url已经失效。    public void postForm() {        RequestBody requestBody = new FormBody.Builder()                .add("search", "Jurassic Park")                .build();        Request request = new Request.Builder()                .url("https://en.wikipedia.org/w/index.php")                .post(requestBody)                .build();        OkHttpClient okHttpClient = new OkHttpClient();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Log.d(TAG, response.protocol() + " " + response.code() + " " + response.message());                Headers headers = response.headers();                for (int i = 0; i < headers.size(); i++) {                    Log.d(TAG, headers.name(i) + ":" + headers.value(i));                }                Log.d(TAG, "onResponse: " + response.body().string());            }        });    }    //提交分块请求    public void postMultiPart() {        String IMGUR_CLIENT_ID = "...";        MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");        OkHttpClient client = new OkHttpClient();        // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image        MultipartBody body = new MultipartBody.Builder("AaB03x")                .setType(MultipartBody.FORM)                .addPart(                        Headers.of("Content-Disposition", "form-data; name=\"title\""),                        RequestBody.create(null, "Square Logo"))                .addPart(                        Headers.of("Content-Disposition", "form-data; name=\"image\""),                        RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))                .build();        Request request = new Request.Builder()                .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)                .url("https://api.imgur.com/3/image")                .post(body)                .build();        Call call = client.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                System.out.println(response.body().string());            }        });    }    //添加拦截器的先进请求    public void getWithInterceptor() {        OkHttpClient okHttpClient = new OkHttpClient.Builder()                .addInterceptor(new LoggingInterceptor())                .build();        Request request = new Request.Builder()                .url("http://www.publicobject.com/helloworld.txt")                //用户代理:一种向访问网站提供你现在所使用的浏览器类型版本、操作系统及版本、浏览器内核等信息标识,                // 通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或进行信息统计;                .header("User-Agent", "Okhttp Example")                .build();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Log.d(TAG, "onFailure: " + e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                ResponseBody body = response.body();                if (body != null) {                    Log.d(TAG, "onResponse: " + response.body().string());                    body.close();                }            }        });    }    public class LoggingInterceptor implements Interceptor {        private static final String TAG = "LoggingInterceptor";        @Override        public Response intercept(Chain chain) throws IOException {            Request request = chain.request();            long startTime = System.nanoTime();            Log.d(TAG, String.format("Sending request %s on %s%n%s",                    request.url(), chain.connection(), request.headers()));            Response response = chain.proceed(request);            long endTime = System.nanoTime();            Log.d(TAG, String.format("Received response for %s in %.1fms%n%s",                    response.request().url(), (endTime - startTime) / 1e6d, response.headers()));            return response;        }    }}

更多相关文章

  1. Android全屏设置的两种方式
  2. Android(安卓)在两个Activity之间切换
  3. Android通过http协议POST传输方式
  4. Android(安卓)Http Get/Post提交请求
  5. android EditText 设置输入的文字的格式方式
  6. android 命令行执行java 的方式
  7. Android增加监听的三种实现方式
  8. 使用Xutils的时候rg.apache.http.client.methods.HttpRequestBas
  9. Android全屏设置的两种方式

随机推荐

  1. Android应用程序注册广播接收器(registerR
  2. android内存处理机制
  3. Android之NDK开发
  4. Unity3D游戏开发之在Android视图中嵌入Un
  5. Google:五亿Android设备激活
  6. android简易双屏支持
  7. Android(安卓)第一课——Android架构
  8. Android学什么?
  9. Android与H5实现页面交互
  10. Android中shape中的属性大全