您的位置:首页 > 理论基础 > 计算机网络

Android----------OkHttp网络请求框架Get和Post简单封装(泛型)

2017-08-10 16:28 1181 查看

请求框架的类:

OkHttp依赖:

compile 'com.squareup.okhttp3:okhttp:3.8.1'

RecyclerView依赖:

compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'


public class OkHttpUtils {
private Handler hand=new Handler();
private NetDataCallback netDataCallback;
public <T>void getdata(String url, final NetDataCallback netDataCallback, final Class<T> tclass) {
//初始化一个 OkHttpClient 并且设置连接和读取超时时间
OkHttpClient okhttp = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//构造一个Request对象
Request request = new Request.Builder().url(url).build();
//通过request的对象去构造得到一个Call对象
Call call = okhttp.newCall(request);
//调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。
call.enqueue(new Callback() {
//失败的情况
@Override
public void onFailure(Call call, IOException e) {
Log.e("///////", "onFailure");
netDataCallback.fail(499,e.getMessage());
}
//成功的情况
@Override
public void onResponse(Call call, Response response) throws IOException {
Gson gson=new Gson();
T t = gson.fromJson(response.body().string(), tclass);
final Message msg = Message.obtain();
msg.what=ok;
msg.obj=t;
hand.post(new Runnable() {
@Override
public void run() {
netDataCallback.success(msg.obj);
}
});

}
});

}
//post请求
public <T>void getLoadDataPost(String url, final NetDataCallback netDataCallback, final Class<T> tClass, RequestBody body){
this.netDataCallback=netDataCallback;
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(20, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.build();
final Request request = new Request.Builder().url(url).post(body).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
netDataCallback.fail(499,e.getMessage());
}

@Override
public void onResponse(Call call, Response response) throws IOException {
T t = new Gson().fromJson(response.body().string(), tClass);
final Message msg = Message.obtain();
msg.what = OK;
msg.obj = t;
hand.post(new Runnable() {
@Override
public void run() {
netDataCallback.success(msg.obj);

}
});
}
});
}

}

定义一个接口:

 
public interface NetDataCallback<T> {
void success(T t);
void fail(int code,String str);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: