- 1.定義一個網(wǎng)絡(luò)訪問的接口,
public interface IHttpProcessor {
void post(String url, Map<String,Object> params,ICallback callback);
}
- 2 .定義Icallback 回傳結(jié)果
public interface ICallback {
void onSuccess(String result);
void onFailure();
}
- 3 .實(shí)現(xiàn)Icallback 接口 將string結(jié)果轉(zhuǎn)成 穿過來要解析的對象
package com.example.amn.translucentdemo;
import com.google.gson.Gson;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* Created by Amn on 2019/4/19.
*/
public abstract class HttpCallback<Result> implements ICallback {
@Override
public void onSuccess(String result) {
//將數(shù)據(jù)轉(zhuǎn)成json對象
Gson gson=new Gson();
Class<?> clz= analysisClassInfo(this);
Result objectResult= (Result) gson.fromJson(result,clz);
}
//獲取 Result 對象
private Class<?> analysisClassInfo(Object object) {
//可以獲取包含原始類型,參數(shù)化類型,類型變量,基本類型
Type genType=object.getClass().getGenericSuperclass();
Type[] typeArgrument=((ParameterizedType)genType).getActualTypeArguments();
return (Class<?>) typeArgrument[0];
}
@Override
public void onFailure() {
}
public abstract void onSuccess(Result objResult);
}
- 4 創(chuàng)建代理類HpptHelper 通過持有第三方框架的引用去實(shí)現(xiàn)網(wǎng)絡(luò)訪問
package com.example.amn.translucentdemo;
import java.util.Map;
/**
* Created by Amn on 2019/4/19.
*/
public class HpptHelper implements IHttpProcessor{
private static HpptHelper instance;
private HpptHelper(){
}
public static HpptHelper getInstance(){
synchronized (HpptHelper.class){
if(instance == null){
instance=new HpptHelper();
}
}
return instance;
}
//持有第三方訪問框架
private static IHttpProcessor mIhttpProcessor;
public static void init(IHttpProcessor httpProcessor){
mIhttpProcessor=httpProcessor;
}
@Override
public void post(String url, Map<String, Object> params, ICallback callback) {
mIhttpProcessor.post(url,params,callback);
}
}
- 第三方框架的具體實(shí)現(xiàn)類 實(shí)現(xiàn) IHttpProcessor 如volley
package com.example.amn.translucentdemo;
import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.Map;
/**
* Created by Amn on 2019/4/19.
*/
public class VolleyProcessor implements IHttpProcessor {
private static RequestQueue mQueue=null;
public VolleyProcessor(Context context){
mQueue= Volley.newRequestQueue(context);
}
@Override
public void post(String url, Map<String, Object> params, final ICallback callback) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
callback.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onFailure();
}
});
mQueue.add(stringRequest);
}
}
okhttp 實(shí)現(xiàn)
package com.example.amn.translucentdemo;
import android.os.Handler;
import java.io.IOException;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* Created by Amn on 2019/4/19.
*/
public class OkhhtpProcessor implements IHttpProcessor {
private OkHttpClient mOkhttpClient;
private Handler mHandler;
public OkhhtpProcessor(){
mOkhttpClient=new OkHttpClient();
mHandler=new Handler();
}
@Override
public void post(String url, Map<String, Object> params, final ICallback callback) {
RequestBody responseBody = appendBody(params);
final Request request=new Request.Builder().url(url).post(responseBody).build();
mOkhttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()){
final String str=response.body().string();
mHandler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(str);
}
});
}
}
});
}
private RequestBody appendBody(Map<String, Object> params) {
FormBody.Builder body=new FormBody.Builder();
if(params ==null || params.isEmpty()){
return body.build();
}
for(Map.Entry<String,Object> entry : params.entrySet()){
body.add(entry.getKey(),entry.getValue().toString());
}
return body.build();
}
}
- 6 .使用 在application 初始化具體用哪個框架
package com.example.amn.translucentdemo;
import android.app.Application;
/**
* Created by Amn on 2019/4/19.
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// HpptHelper.init(new VolleyProcessor(this));
HpptHelper.init(new OkhhtpProcessor());
}
}
- 7 . activity 調(diào)用
HpptHelper.getInstance().post(url, params, new HttpCallback<DataInfo>() {
@Override
public void onSuccess(DataInfo objResult) {
}
});