OKHtt自己封装

来源:互联网 发布:九仙图仙羽进阶数据 编辑:程序博客网 时间:2024/05/21 08:36
OKHttpUtils
package com.bwie.okhttp;import android.os.Handler;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;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();        }    }    //公用的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);    }}


OkHttpCallback
import android.os.Handler;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public abstract class OnUiCallback implements Callback{    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(Call call, 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();                }            }        });    }}

MainActivity
package com.bwie.okhttp;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.TextView;import java.io.IOException;import okhttp3.Call;public class MainActivity extends AppCompatActivity {    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        OkHttpUtils.getInstance().doGet("http://www.baidu.com", new OnUiCallback() {            @Override            public void onFailed(Call call, IOException e) {            }            @Override            public void onSuccess(String result) throws IOException {                Log.i("====","onResponse:"+result);                tv.setText(result);            }        });    }    private void initView() {        tv = (TextView) findViewById(R.id.tv);    }}


原创粉丝点击