Retrofit

RetrofitUtils

package com.example.activity.myapplication.utils;



import java.io.IOException;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class RetrofitUtils {
    private final MyApiService myApiService;

private RetrofitUtils() {
    HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient okHttpClient=new OkHttpClient.Builder()
            .readTimeout(20,TimeUnit.SECONDS)
            .connectTimeout(20,TimeUnit.SECONDS)
            .writeTimeout(20,TimeUnit.SECONDS)
            .addInterceptor(httpLoggingInterceptor)
            .retryOnConnectionFailure(true)
            .build();
    Retrofit retrofit=new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .baseUrl(Contacts.BASE_URL)
            .client(okHttpClient)
            .build();
    //通過Retrofit創建完 這個ApiService 就可以調用方法了
    myApiService = retrofit.create(MyApiService.class);
}
    private static class RetroHolder{
        private static final  RetrofitUtils retrofitUtils=new RetrofitUtils();
    }
    public static RetrofitUtils getInstence(){
        return RetroHolder.retrofitUtils;
    }
    public RetrofitUtils get(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, final HttpListener httpListener){
        Observer<ResponseBody> observer=new Observer<ResponseBody>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }
            @Override
            public void onNext(ResponseBody responseBody) {
                if(httpListener!=null){
                    try {
                        httpListener.onSuccess(responseBody.string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        };
        myApiService.get(url,map,hashMap)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);

        return RetrofitUtils.getInstence();

    }
    public RetrofitUtils post(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, final HttpListener httpListener){
        Observer<ResponseBody> observer=new Observer<ResponseBody>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }
            @Override
            public void onNext(ResponseBody responseBody) {
                if(httpListener!=null){
                    try {
                        httpListener.onSuccess(responseBody.string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        };
        myApiService.post(url,map,hashMap)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);

        return RetrofitUtils.getInstence();
    }

    //HttpListener httpListener;
    public interface HttpListener{
        void onSuccess(String jsonStr);
        void onError(String error);
    }
  /*  public void setHttpListene( HttpListener httpListener){
        this.httpListener=httpListener;
    }*/
}

MyApiService

package com.example.activity.myapplication.utils;

import java.util.HashMap;

import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
import rx.Observable;

public interface MyApiService {
    @GET
    Observable<ResponseBody> get(@Url String url, @QueryMap HashMap<String,String> map,@HeaderMap HashMap<String,Object> hashMap);
    @POST
    Observable<ResponseBody> post(@Url String url,@QueryMap HashMap<String,String> map,@HeaderMap HashMap<String,Object>hashMap);



}

contacts

package com.example.activity.myapplication.utils;

public class Contacts {

    public static final String BASE_URL="http://172.17.8.100/";
    public static final String LOGIN_URL="small/user/v1/login";
    public static final String REGIST_URL="small/user/v1/register";

    //輪播
    public static final String USER_LUNBO = "small/commodity/v1/bannerShow";
    public static final String HOME_GOODSURL="small/commodity/v1/commodityList";
    public static final String CIRCLE_URL="small/circle/v1/findCircleList";
}

Persenter

package com.example.activity.myapplication.presenter;

import java.util.HashMap;

public interface Persenter {

    void requestPost(String url, HashMap<String,String> map,HashMap<String,Object>hashMap, Class clazz);
    void requestGEt(String url, HashMap<String,String> map,HashMap<String,Object>hashMap,Class clazz);
}

PersenterImpl

package com.example.activity.myapplication.presenter;

import com.example.activity.myapplication.callback.MyCallBack;
import com.example.activity.myapplication.model.ModelImpl;
import com.example.activity.myapplication.view.IView;

import java.util.HashMap;

public class PersenterIpml implements Persenter {

    private ModelImpl model;
    private IView iView;

    public PersenterIpml(IView iView) {
        this.iView = iView;
        model=new ModelImpl();
    }

    @Override
    public void requestPost(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, Class clazz) {
        model.getPostData(url, map,hashMap, clazz, new MyCallBack() {
            @Override
            public void setData(Object data) {
                iView.success(data);
            }
            @Override
            public void setError(Object error) {
                iView.error(error);

            }
        });
    }

    @Override
    public void requestGEt(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, Class clazz) {

        model.getData(url, map,hashMap, clazz, new MyCallBack() {
            @Override
            public void setData(Object data) {
                iView.success(data);
            }

            @Override
            public void setError(Object error) {
         iView.error(error);
            }
        });
    }
}

Model

package com.example.activity.myapplication.model;

import com.example.activity.myapplication.callback.MyCallBack;

import java.util.HashMap;

public interface Model {
    void getPostData(String url,HashMap<String,String>map,HashMap<String,Object>hashMap,Class clazz,MyCallBack callBack);
    void getData(String url, HashMap<String,String>map,HashMap<String,Object>hashMap,Class clazz ,MyCallBack callBack);
}

ModelImpl

package com.example.activity.myapplication.model;




import com.example.activity.myapplication.callback.MyCallBack;

import com.example.activity.myapplication.utils.RetrofitUtils;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;

public class ModelImpl implements Model {

//    private MyCallBack callBack;


    @Override
    public void getPostData(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, final Class clazz, final MyCallBack callBack) {
        RetrofitUtils.getInstence().post(url,map,hashMap,new RetrofitUtils.HttpListener() {
            @Override
            public void onSuccess(String jsonStr) {
                Gson gson=new Gson();
                Object o = gson.fromJson(jsonStr, clazz);
                callBack.setData(o);
            }

            @Override
            public void onError(String error) {
                callBack.setError(error);

            }
        });
    }

    @Override
    public void getData(String url, HashMap<String, String> map,HashMap<String,Object>hashMap, final Class clazz, final MyCallBack callBack) {

        RetrofitUtils.getInstence().get(url,map,hashMap,new RetrofitUtils.HttpListener() {
            @Override
            public void onSuccess(String jsonStr) {
                Gson gson=new Gson();
                Object o = gson.fromJson(jsonStr, clazz);
                callBack.setData(o);
            }

            @Override
            public void onError(String error) {

                callBack.setData(error);
            }
        });

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章