拦截器
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
return chain.proceed(request);
}
}).build();
package soexample.umeng.com.shopcar.utils;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* author:AbnerMing
* date:2018/10/24
*/
public class OkHttpUtils {
private OkHttpUtils(){}
private static OkHttpUtils mOkHttpUtils;
public synchronized static OkHttpUtils getOkHttpUtils(){
if(mOkHttpUtils==null){
mOkHttpUtils=new OkHttpUtils();
}
return mOkHttpUtils;
}
//get请求
public OkHttpUtils get(String url){
final Message message=Message.obtain();
OkHttpClient okHttpClient = null;
try {
okHttpClient = getOkHttpClient();
} catch (IOException e) {
e.printStackTrace();
}
final Request request=new Request.Builder()
.url(url)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
message.what=100;
message.obj=e.getMessage();
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
message.what=101;
message.obj=response.body().string();
handler.sendMessage(message);
}
});
return this;
}
@NonNull
private OkHttpClient getOkHttpClient() throws IOException {
return new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request re = chain.request();
String method=re.method();
String host=re.url().host();
Log.i("OkHttpUtils",method+"=="+host);
return chain.proceed(re);
}
}).build();
}
//post请求
public void post(String url,RequestBody body){
final Message message=Message.obtain();
try {
OkHttpClient client= getOkHttpClient();
Request request=new Request.Builder()
.url(url)
.post(body).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
message.what=100;
message.obj=e.getMessage();
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
message.what=101;
message.obj=response.body().string();
handler.sendMessage(message);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 101://成功
String data= (String) msg.obj;
listener.success(data);
break;
case 100://失败
String error= (String) msg.obj;
listener.fail(error);
break;
}
}
};
private HttpListener listener;
public void result(HttpListener listener){
this.listener=listener;
}
public interface HttpListener{
void success(String data);
void fail(String error);
}
}
package com.example.okhttp;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import java.io.File;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private String url = "https://www.zhaoapi.cn/product/getCatagory";
private String url2 = "https://www.vipandroid.cn/cert/get_news_speak.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_click).setOnClickListener(this);
findViewById(R.id.btn_click2).setOnClickListener(this);
findViewById(R.id.btn_click3).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_click:
doGet();
break;
case R.id.btn_click2:
doGet2();
break;
case R.id.btn_click3:
doPost();
break;
}
}
private void doPost() {
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody body = new FormEncodingBuilder()
.add("open_id","100")
.build();
Request request = new Request.Builder()
.post(body)
.url(url2)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
String data = response.body().string();
Log.i("aaa",data);
}
});
}
//Get同步请求
private void doGet2() {
new Thread(){
@Override
public void run() {
super.run();
OkHttpClient okHttpClient = new OkHttpClient();
Request request= new Request.Builder().url(url).build();
try {
Response response = okHttpClient.newCall(request).execute();
String data = response.body().string();
Log.i("aaa",data);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
//Get异步请求
private void doGet() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.get()
.url(url)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Log.i("aaa",string);
}
});
}
}
封装get请求方法
package com.example.dw20181015.net;
import android.os.Handler;
import android.os.Message;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class OkHttp {
public OkHttp get(String url){
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(url)
.get()
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
String result = response.body().string();
Message message = new Message();
message.what = 0;
message.obj = result;
handler.sendMessage(message);
}
});
return this;
}
private NetCallBack netCallBack;
public void setNetCallBack(NetCallBack netCallBack) {
this.netCallBack = netCallBack;
}
public interface NetCallBack{
void onSuccess(String result);
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what ==0){
String result = (String) msg.obj;
netCallBack.onSuccess(result);
}
}
};
}