注释:对okhttp的简单封装实际上就是就是更加简单的调用
方法:
1.新建http文件夹
2.然后新建两个类,然后类名为:BaseCallBack,OkHttpHelper
3.为了使用这个dialog,需要在build中加入相应的依赖
3.再新建SpotsCallBack类,这个类用于使用okhttp来获取json数据,再用Gson解析,得到的数据放入带list<javabean>时,显示一个dialog窗口
4.在activity中使用这个封装
代码:
2.BaseCallBack
package zuo.com.ui.http; import com.google.gson.internal.$Gson$Types; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import java.io.IOException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public abstract class BaseCallback <T> { public Type mType; static Type getSuperclassTypeParameter(Class<?> subclass) { Type superclass = subclass.getGenericSuperclass(); if (superclass instanceof Class) { throw new RuntimeException("Missing type parameter."); } ParameterizedType parameterized = (ParameterizedType) superclass; return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]); } public BaseCallback() { mType = getSuperclassTypeParameter(getClass()); } public abstract void onBeforeRequest(Request request); public abstract void onFailure(Request request, Exception e) ; /** *请求成功时调用此方法 * @param response */ public abstract void onResponse(Response response); /** * * 状态码大于200,小于300 时调用此方法 * @param response * @param t * @throws IOException */ public abstract void onSuccess(Response response,T t) ; /** * 状态码400,404,403,500等时调用此方法 * @param response * @param code * @param e */ public abstract void onError(Response response, int code,Exception e) ; }
package zuo.com.ui.http; import android.os.Handler; import android.os.Looper; import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonParseException; import com.squareup.okhttp.Callback; import com.squareup.okhttp.FormEncodingBuilder; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; public class OkHttpHelper { public static final String TAG="OkHttpHelper"; private static OkHttpHelper mInstance; private OkHttpClient mHttpClient; private Gson mGson; private Handler mHandler; static { mInstance = new OkHttpHelper(); } private OkHttpHelper(){ mHttpClient = new OkHttpClient(); mHttpClient.setConnectTimeout(10, TimeUnit.SECONDS); mHttpClient.setReadTimeout(10,TimeUnit.SECONDS); mHttpClient.setWriteTimeout(30,TimeUnit.SECONDS); mGson = new Gson(); mHandler = new Handler(Looper.getMainLooper()); }; public static OkHttpHelper getInstance(){ return mInstance; } public void get(String url,BaseCallback callback){ Request request = buildGetRequest(url); request(request,callback); } public void post(String url,Map<String,String> param, BaseCallback callback){ Request request = buildPostRequest(url,param); request(request,callback); } public void request(final Request request,final BaseCallback callback){ callback.onBeforeRequest(request); mHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { callback.onFailure(request,e); } @Override public void onResponse(Response response) throws IOException { callback.onResponse(response); if(response.isSuccessful()) { String resultStr = response.body().string(); Log.d(TAG, "result=" + resultStr); if (callback.mType == String.class){ callbackSuccess(callback,response,resultStr); } else { try { Object obj = mGson.fromJson(resultStr, callback.mType); callbackSuccess(callback,response,obj); } catch (JsonParseException e){ // Json解析的错误 callback.onError(response,response.code(),e); } } } else { callbackError(callback,response,null); } } }); } private void callbackSuccess(final BaseCallback callback , final Response response, final Object obj ){ mHandler.post(new Runnable() { @Override public void run() { callback.onSuccess(response, obj); } }); } private void callbackError(final BaseCallback callback , final Response response, final Exception e ){ mHandler.post(new Runnable() { @Override public void run() { callback.onError(response,response.code(),e); } }); } private Request buildPostRequest(String url,Map<String,String> params){ return buildRequest(url,HttpMethodType.POST,params); } private Request buildGetRequest(String url){ return buildRequest(url,HttpMethodType.GET,null); } private Request buildRequest(String url,HttpMethodType methodType,Map<String,String> params){ Request.Builder builder = new Request.Builder() .url(url); if (methodType == HttpMethodType.POST){ RequestBody body = builderFormData(params); builder.post(body); } else if(methodType == HttpMethodType.GET){ builder.get(); } return builder.build(); } private RequestBody builderFormData(Map<String,String> params){ FormEncodingBuilder builder = new FormEncodingBuilder(); if(params !=null){ for (Map.Entry<String,String> entry :params.entrySet() ){ builder.add(entry.getKey(),entry.getValue()); } } return builder.build(); } enum HttpMethodType{ GET, POST, } }
3.SpotsCallBack代码:
package zuo.com.ui.http; import android.content.Context; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import dmax.dialog.SpotsDialog; public abstract class SpotsCallBack<T> extends BaseCallback<T> { private Context mContext; private SpotsDialog mDialog; public SpotsCallBack(Context context){ mContext = context; initSpotsDialog(); } private void initSpotsDialog(){ mDialog = new SpotsDialog(mContext,"拼命加载中..."); } public void showDialog(){ mDialog.show(); } public void dismissDialog(){ mDialog.dismiss(); } public void setLoadMessage(int resId){ mDialog.setMessage(mContext.getString(resId)); } @Override public void onFailure(Request request, Exception e) { dismissDialog(); } @Override public void onBeforeRequest(Request request) { showDialog(); } @Override public void onResponse(Response response) { dismissDialog(); } }
4.添加的dependence依赖:
compile 'com.github.d-max:spots-dialog:0.4@aar' } //compile 'com.github.d-max:spots-dialog:0.4@aar'是对一个加载dialog的依赖
5.在Activity中使用这个封装的类:首先创建对象,然后编写方法(这个方法实际上就是对list<javabean>的对象赋值,然后将值设置到页面上),之后调用这个方法,之后将值设置到页面上
//简单封装okhttp操作,首先创建对象 private OkHttpHelper httpHelper = OkHttpHelper.getInstance();
requestHttpImformation(); initSlider();
/** * 获取网络上的数据,用get方法,得到的json数据 */ private void requestHttpImformation(){ String url ="http://112.124.22.238:8081/course_api/banner/query?type=1"; // OkHttpClient okHttpClient=new OkHttpClient(); // RequestBody body = new FormEncodingBuilder().add("type","1").build(); // Request request=new Request.Builder().url(url).post(body).build(); // // // okHttpClient.newCall(request).enqueue(new Callback() { // @Override // public void onFailure(Request request, IOException e) { // // } // // @Override // public void onResponse(Response response) throws IOException { // // if (response.isSuccessful()) { // String json = response.body().string(); //json数据只需要用.string()获取就行 // Type type=new TypeToken<List<Banner>>(){}.getType(); //使用Gson实现对json数据的解析 // banners=gson.fromJson(json,type); //然后放在list中 // // Log.d(TAG, "获取的数据为" + json); // } // // } // }); httpHelper.get(url, new SpotsCallBack<List<Banner>>(getContext()){ @Override public void onSuccess(Response response, List<Banner> mbanners) { banners = mbanners; initSlider(); } @Override public void onError(Response response, int code, Exception e) { } }); }
private void initSlider() { if(banners!=null) { for (Banner b:banners) { TextSliderView textSliderView = new TextSliderView(this.getActivity()); textSliderView.description(b.getName()).image(b.getImgUrl()); sliderLayout.addSlider(textSliderView); } } // textSliderView.description("新品男装").image(R.mipmap.slider_mani); // textSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { // @Override // public void onSliderClick(BaseSliderView slider) { // Toast.makeText(getContext(),"新品男装",Toast.LENGTH_SHORT).show(); // } // }); // // TextSliderView textSliderView1 = new TextSliderView(this.getActivity()); // textSliderView1.description("潮流女装").image(R.mipmap.slider_woman); // textSliderView1.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { // @Override // public void onSliderClick(BaseSliderView slider) { // Toast.makeText(getContext(),"潮流女装",Toast.LENGTH_SHORT).show(); // } // }); // // TextSliderView textSliderView2 = new TextSliderView(this.getActivity()); // textSliderView2.description("时尚男装").image(R.mipmap.slider_man); // textSliderView2.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { // @Override // public void onSliderClick(BaseSliderView slider) { // Toast.makeText(getContext(),"时尚男装",Toast.LENGTH_SHORT).show(); // } // }); // // TextSliderView textSliderView3 = new TextSliderView(this.getActivity()); // textSliderView3.description("青春女装").image(R.mipmap.slider_yu); // textSliderView3.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { // @Override // public void onSliderClick(BaseSliderView slider) { // Toast.makeText(getContext(),"青春女装",Toast.LENGTH_SHORT).show(); // } // }); // // sliderLayout.addSlider(textSliderView); // sliderLayout.addSlider(textSliderView1); // sliderLayout.addSlider(textSliderView2); // sliderLayout.addSlider(textSliderView3); sliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom); //这个为默认的indicator // sliderLayout.setCustomIndicator(pagerIndicator); //设置下标的点,所在的位置在底部正中间 sliderLayout.setCustomAnimation(new DescriptionAnimation()); //动画效果 sliderLayout.setPresetTransformer(SliderLayout.Transformer.RotateUp); //设置转动模式,下面的文字说明自动出来 sliderLayout.setDuration(3000); //设置动画效果3秒自动转动 //sliderLayout的监听事件,这个监听事件 sliderLayout.addOnPageChangeListener(new ViewPagerEx.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Log.d(TAG,"onPageScrolled"); } @Override public void onPageSelected(int position) { // Log.d(TAG,"onPageSelected"); } @Override public void onPageScrollStateChanged(int state) { // Log.d(TAG,"onPageScrollStateChanged"); } }); }
效果图
最上面的sliderlayout,就是获取json数据,解析到sliderview上面