Okhttp

来源:互联网 发布:汽车调色软件 编辑:程序博客网 时间:2024/06/03 05:02
package code.feihu.com.shangfeihu_yuekao.okhttp;


import android.os.Handler;


import java.io.IOException;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;




public class OkHttpUtils {
    private Handler handler = new Handler();
    public Handler getHandler(){
        return handler;
    }
    //单例
    private static OkHttpUtils okHttpUtils = new OkHttpUtils();
    private OkHttpUtils(){};
    public static OkHttpUtils getInstance(){
        return okHttpUtils;
    }


    private OkHttpClient client;
    private void initOkHttpClient(){
        if(client == null){
            client = new OkHttpClient.Builder().build();
        }
    }


    Interceptor appInterceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            //---------请求之前------------
            Response response = chain.proceed(request);
            //---------请求之后------------
            return response;
        }


    };


    //公用的get请求方法  完成的功能不确定
    public void doGet(String url, Callback callback){
        initOkHttpClient();
        Request request = new Request.Builder().
                url(url).build();
        Call call = client.newCall(request);
        call.enqueue(callback);
    }


}

======================================================================

package code.feihu.com.shangfeihu_yuekao.okhttp;


import android.os.Handler;


import java.io.IOException;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


public abstract class OnUiCallback implements Callback{
    private Handler handler = OkHttpUtils.getInstance().getHandler();
    public abstract void onFailed(Call call, IOException e);
    public abstract void onSuccess(String result) throws IOException;


    @Override
    public void onFailure(final Call call, final IOException e) {
        //该方式  存在问题  网络请求也跑到了主线程   待解决
        //该方法就是把  线程post到handler所在的线程
        handler.post(new Runnable() {
            @Override
            public void run() {
                onFailed(call, e);
            }
        });


    }


    @Override
    public void onResponse(final Call call, final Response response) throws IOException {
        final String result = response.body().string();
        //该方式  存在问题  网络请求也跑到了主线程   待解决
        handler.post(new Runnable() {
            @Override
            public void run() {
                try {
                    onSuccess(result);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}