// Path: app/src/main/java/com/example/app/rxjava/base/BaseModel.java
// public class BaseModel {
//     public static final String API_SERVER = "服务器地址";
//     private static volatile HttpLoggingInterceptor loggingInterceptor;
//     private static volatile RequestInterceptor requestInterceptor;
//     private static volatile CacheInterceptor cacheInterceptor;
//     private static volatile File httpCacheDirectory;
//     private static volatile Cache cache;
//     // OkHttp3.0的使用方式
//     private static volatile OkHttpClient client;
// 
//     protected Retrofit.Builder getRetrofitBuilder() {
//         if (loggingInterceptor == null) {
//             synchronized (BaseModel.class) {
//                 // Log信息
//                 loggingInterceptor = new HttpLoggingInterceptor();
//                 loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
// 
//                 // 拦截器，在请求中增加额外参数
//                 requestInterceptor = new RequestInterceptor();
// 
//                 // 缓存拦截器
//                 cacheInterceptor = new CacheInterceptor();
//                 //设置缓存路径
//                 httpCacheDirectory = new File(AppApplication.getInstance().getCacheDir(), "responses");
//                 //设置缓存大小 10M
//                 cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
//                 client = new OkHttpClient.Builder()
//                         .cookieJar(new CookiesManager())
//                         .addInterceptor(requestInterceptor)
//                         .addInterceptor(loggingInterceptor)
//                         .addInterceptor(cacheInterceptor)
//                         .addNetworkInterceptor(cacheInterceptor)
//                         .cache(cache)
//                         .build();
//             }
//         }
// 
//         // 适配器
//         Retrofit.Builder builder = new Retrofit.Builder()
//                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//                 .client(client);
//         return builder;
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/base/ResultsDeserializer.java
// public class ResultsDeserializer<T> implements JsonDeserializer<T> {
//     @Override
//     public T deserialize(JsonElement je, Type typeOfT,
//                          JsonDeserializationContext context) throws JsonParseException {
//         // 转换Json的数据, 获取内部有用的信息
//         JsonElement results = je.getAsJsonObject();
//         return new Gson().fromJson(results, typeOfT);
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/bean/picture/Picture.java
// public class Picture {
//     private String tag1;
//     private String tag2;
//     private int totalNum;
//     private int start_index;
//     private int return_number;
//     private List<Data> data;
// 
//     public String getTag1() {
//         return tag1;
//     }
// 
//     public void setTag1(String tag1) {
//         this.tag1 = tag1;
//     }
// 
//     public String getTag2() {
//         return tag2;
//     }
// 
//     public void setTag2(String tag2) {
//         this.tag2 = tag2;
//     }
// 
//     public int getTotalNum() {
//         return totalNum;
//     }
// 
//     public void setTotalNum(int totalNum) {
//         this.totalNum = totalNum;
//     }
// 
//     public int getStart_index() {
//         return start_index;
//     }
// 
//     public void setStart_index(int start_index) {
//         this.start_index = start_index;
//     }
// 
//     public int getReturn_number() {
//         return return_number;
//     }
// 
//     public void setReturn_number(int return_number) {
//         this.return_number = return_number;
//     }
// 
//     public List<Data> getData() {
//         return data;
//     }
// 
//     public void setData(List<Data> data) {
//         this.data = data;
//     }
// 
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/main/model/ia/WaterfallIA.java
// public interface WaterfallIA {
//     public Observable<Picture> getServerData(int pageNum);
// }


import com.example.app.rxjava.base.BaseModel;
import com.example.app.rxjava.base.ResultsDeserializer;
import com.example.app.rxjava.bean.picture.Picture;
import com.example.app.rxjava.module.main.model.ia.WaterfallIA;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;
package com.example.app.rxjava.module.main.model;



/**
 * Created by Administrator on 2016/2/29.
 */
public class WaterfallModel extends BaseModel implements WaterfallIA {
    private static final String ENDPOINT = "http://image.baidu.com";
    private final Service mService;

    public static final int ROWNUM = 30;

    public WaterfallModel() {
        // 对返回的数据进行解析
        Gson gsonInstance = new GsonBuilder()
                .registerTypeAdapter(new TypeToken<Picture>() {
                        }.getType(),
                        new ResultsDeserializer<Picture>())
                .create();

        // 适配器
        Retrofit mRetrofit = getRetrofitBuilder()
                .baseUrl(ENDPOINT)
                .addConverterFactory(GsonConverterFactory.create(gsonInstance))
                .build();

        // 服务
        mService = mRetrofit.create(Service.class);
    }

    @Override
    public Observable<Picture> getServerData(int pageNum) {
        return mService.getData(pageNum, ROWNUM, "宠物", "全部");
    }

    /**
     * 服务接口
     */
    private interface Service {

        @GET("/channel/listjson")
// Path: app/src/main/java/com/example/app/rxjava/base/BaseModel.java
// public class BaseModel {
//     public static final String API_SERVER = "服务器地址";
//     private static volatile HttpLoggingInterceptor loggingInterceptor;
//     private static volatile RequestInterceptor requestInterceptor;
//     private static volatile CacheInterceptor cacheInterceptor;
//     private static volatile File httpCacheDirectory;
//     private static volatile Cache cache;
//     // OkHttp3.0的使用方式
//     private static volatile OkHttpClient client;
// 
//     protected Retrofit.Builder getRetrofitBuilder() {
//         if (loggingInterceptor == null) {
//             synchronized (BaseModel.class) {
//                 // Log信息
//                 loggingInterceptor = new HttpLoggingInterceptor();
//                 loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
// 
//                 // 拦截器，在请求中增加额外参数
//                 requestInterceptor = new RequestInterceptor();
// 
//                 // 缓存拦截器
//                 cacheInterceptor = new CacheInterceptor();
//                 //设置缓存路径
//                 httpCacheDirectory = new File(AppApplication.getInstance().getCacheDir(), "responses");
//                 //设置缓存大小 10M
//                 cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
//                 client = new OkHttpClient.Builder()
//                         .cookieJar(new CookiesManager())
//                         .addInterceptor(requestInterceptor)
//                         .addInterceptor(loggingInterceptor)
//                         .addInterceptor(cacheInterceptor)
//                         .addNetworkInterceptor(cacheInterceptor)
//                         .cache(cache)
//                         .build();
//             }
//         }
// 
//         // 适配器
//         Retrofit.Builder builder = new Retrofit.Builder()
//                 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//                 .client(client);
//         return builder;
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/base/ResultsDeserializer.java
// public class ResultsDeserializer<T> implements JsonDeserializer<T> {
//     @Override
//     public T deserialize(JsonElement je, Type typeOfT,
//                          JsonDeserializationContext context) throws JsonParseException {
//         // 转换Json的数据, 获取内部有用的信息
//         JsonElement results = je.getAsJsonObject();
//         return new Gson().fromJson(results, typeOfT);
//     }
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/bean/picture/Picture.java
// public class Picture {
//     private String tag1;
//     private String tag2;
//     private int totalNum;
//     private int start_index;
//     private int return_number;
//     private List<Data> data;
// 
//     public String getTag1() {
//         return tag1;
//     }
// 
//     public void setTag1(String tag1) {
//         this.tag1 = tag1;
//     }
// 
//     public String getTag2() {
//         return tag2;
//     }
// 
//     public void setTag2(String tag2) {
//         this.tag2 = tag2;
//     }
// 
//     public int getTotalNum() {
//         return totalNum;
//     }
// 
//     public void setTotalNum(int totalNum) {
//         this.totalNum = totalNum;
//     }
// 
//     public int getStart_index() {
//         return start_index;
//     }
// 
//     public void setStart_index(int start_index) {
//         this.start_index = start_index;
//     }
// 
//     public int getReturn_number() {
//         return return_number;
//     }
// 
//     public void setReturn_number(int return_number) {
//         this.return_number = return_number;
//     }
// 
//     public List<Data> getData() {
//         return data;
//     }
// 
//     public void setData(List<Data> data) {
//         this.data = data;
//     }
// 
// }
// 
// Path: app/src/main/java/com/example/app/rxjava/module/main/model/ia/WaterfallIA.java
// public interface WaterfallIA {
//     public Observable<Picture> getServerData(int pageNum);
// }


// Path: app/src/main/java/com/example/app/rxjava/module/main/model/WaterfallModel.java
import com.example.app.rxjava.base.BaseModel;
import com.example.app.rxjava.base.ResultsDeserializer;
import com.example.app.rxjava.bean.picture.Picture;
import com.example.app.rxjava.module.main.model.ia.WaterfallIA;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

package com.example.app.rxjava.module.main.model;



/**
 * Created by Administrator on 2016/2/29.
 */
public class WaterfallModel extends BaseModel implements WaterfallIA {
    private static final String ENDPOINT = "http://image.baidu.com";
    private final Service mService;

    public static final int ROWNUM = 30;

    public WaterfallModel() {
        // 对返回的数据进行解析
        Gson gsonInstance = new GsonBuilder()
                .registerTypeAdapter(new TypeToken<Picture>() {
                        }.getType(),
                        new ResultsDeserializer<Picture>())
                .create();

        // 适配器
        Retrofit mRetrofit = getRetrofitBuilder()
                .baseUrl(ENDPOINT)
                .addConverterFactory(GsonConverterFactory.create(gsonInstance))
                .build();

        // 服务
        mService = mRetrofit.create(Service.class);
    }

    @Override
    public Observable<Picture> getServerData(int pageNum) {
        return mService.getData(pageNum, ROWNUM, "宠物", "全部");
    }

    /**
     * 服务接口
     */
    private interface Service {

        @GET("/channel/listjson")
        Observable<Picture> getData(@Query("pn") int pn, @Query("rn") int rn, @Query("tag1") String tag1, @Query("tag2") String tag2);