Android(安卓)Okhttp的基础使用版
16lz
2021-12-04
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; } }}
更多相关文章
- Android全屏设置的两种方式
- Android(安卓)在两个Activity之间切换
- Android通过http协议POST传输方式
- Android(安卓)Http Get/Post提交请求
- android EditText 设置输入的文字的格式方式
- android 命令行执行java 的方式
- Android增加监听的三种实现方式
- 使用Xutils的时候rg.apache.http.client.methods.HttpRequestBas
- Android全屏设置的两种方式