diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 3fa9f1820d321f33422030529fdaf1071b69e3fb..e518cc4fbc09eb766724edddfb2d0825183b6315 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -10,6 +10,7 @@ diff --git a/.idea/libraries/animated_vector_drawable_23_3_0.xml b/.idea/libraries/animated_vector_drawable_23_3_0.xml deleted file mode 100644 index a22e59e09142794b7bf4bcb102d86e6e7a8d30f5..0000000000000000000000000000000000000000 --- a/.idea/libraries/animated_vector_drawable_23_3_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/animated_vector_drawable_23_4_0.xml b/.idea/libraries/animated_vector_drawable_23_4_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..c7190d33df02756ac3796d471f79d2c27f75c963 --- /dev/null +++ b/.idea/libraries/animated_vector_drawable_23_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/appcompat_v7_23_3_0.xml b/.idea/libraries/appcompat_v7_23_3_0.xml deleted file mode 100644 index c7190009d3b2cb9af69b7114c695a7ff042db0fa..0000000000000000000000000000000000000000 --- a/.idea/libraries/appcompat_v7_23_3_0.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/appcompat_v7_23_4_0.xml b/.idea/libraries/appcompat_v7_23_4_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ed12beed1ad569ebacfd1e37e5ed10510d156e8 --- /dev/null +++ b/.idea/libraries/appcompat_v7_23_4_0.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/paginate_0_5_1.xml b/.idea/libraries/paginate_0_5_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..97ba6a922e3ac733dc4437ed1430a348c0d85da9 --- /dev/null +++ b/.idea/libraries/paginate_0_5_1.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/recyclerview_v7_23_3_0.xml b/.idea/libraries/recyclerview_v7_23_3_0.xml index d5e253d97800a2a1755876ce692c335e0b96e6c3..dea97663c69bcb214df5e2ce3d5c7cdde1e114bf 100644 --- a/.idea/libraries/recyclerview_v7_23_3_0.xml +++ b/.idea/libraries/recyclerview_v7_23_3_0.xml @@ -1,15 +1,17 @@ + - - + + + \ No newline at end of file diff --git a/.idea/libraries/rxjava_1_1_5.xml b/.idea/libraries/rxjava_1_1_5.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec590f73c6dcd649a411157f2d5d2d1815a065a2 --- /dev/null +++ b/.idea/libraries/rxjava_1_1_5.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_annotations_23_3_0.xml b/.idea/libraries/support_annotations_23_3_0.xml deleted file mode 100644 index 0b9c934998a86df3427bd6d0ce4a1bdd958b1df0..0000000000000000000000000000000000000000 --- a/.idea/libraries/support_annotations_23_3_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/support_annotations_23_4_0.xml b/.idea/libraries/support_annotations_23_4_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..08b64726edde6667bb16178e0c0529879f5c1257 --- /dev/null +++ b/.idea/libraries/support_annotations_23_4_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_v4_23_3_0.xml b/.idea/libraries/support_v4_23_3_0.xml deleted file mode 100644 index f7b3c117190b4c0953a363fae4e417d91b811d0e..0000000000000000000000000000000000000000 --- a/.idea/libraries/support_v4_23_3_0.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/support_v4_23_4_0.xml b/.idea/libraries/support_v4_23_4_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..053534a1409a81472ee769da47602e1eeb8c2263 --- /dev/null +++ b/.idea/libraries/support_v4_23_4_0.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_vector_drawable_23_3_0.xml b/.idea/libraries/support_vector_drawable_23_3_0.xml deleted file mode 100644 index 2b684df41a8eca22b7befab634cc0ef5c61d6223..0000000000000000000000000000000000000000 --- a/.idea/libraries/support_vector_drawable_23_3_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/support_vector_drawable_23_4_0.xml b/.idea/libraries/support_vector_drawable_23_4_0.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec4bf90c135f447157dce714cdb1f1749e480447 --- /dev/null +++ b/.idea/libraries/support_vector_drawable_23_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 729144be08480169fb8c207fb53ef41841a7d66e..91bd20ca9b057322d366f94310e99579040d00ce 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -5,6 +5,7 @@ + \ No newline at end of file diff --git a/.idea/statistic.xml b/.idea/statistic.xml new file mode 100644 index 0000000000000000000000000000000000000000..557a4b196ac8b8494c0f71cb34d7223ed9b80a77 --- /dev/null +++ b/.idea/statistic.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 18c52d8042f2889e0c46e32fa79e7a4e0a1154e1..a00a3f5994ccf76846a88bb0bcec823b1ad4c6dd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,11 +41,10 @@ buildscript { dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + compile fileTree(include: ['*.jar'], dir: 'libs') testCompile rootProject.ext.dependencies["junit"] apt rootProject.ext.dependencies["dagger2-apt-compiler"] - compile rootProject.ext.dependencies["cardview-v7"] provided rootProject.ext.dependencies["javax.annotation"] compile project(':arms') - + compile rootProject.ext.dependencies["paginate"] } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index beff6ce32fc2eadf3e57c28bda26aab45187d28e..5d7f1cd0e41ec4c91ecfd23ee6e11ba90a50a430 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java b/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java index d4841b2c3b7e269dc2155b8106b633fd1e4db55f..52cf744b342e543b9636ef77e8851e8355e235ac 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/app/WEApplication.java @@ -1,13 +1,23 @@ package me.jessyan.mvparms.demo.app; +import android.content.Context; + import com.jess.arms.base.BaseApplication; import com.jess.arms.http.GlobeHttpResultHandler; +import com.jess.arms.utils.UiUtils; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import me.jessyan.mvparms.demo.di.component.AppComponent; import me.jessyan.mvparms.demo.di.component.DaggerAppComponent; import me.jessyan.mvparms.demo.di.module.CacheModule; import me.jessyan.mvparms.demo.di.module.ServiceModule; import me.jessyan.mvparms.demo.mvp.model.api.Api; +import me.jessyan.rxerrorhandler.handler.listener.ResponseErroListener; +import okhttp3.Interceptor; +import okhttp3.Response; import timber.log.Timber; /** @@ -51,8 +61,42 @@ public class WEApplication extends BaseApplication { public GlobeHttpResultHandler getHttpResultHandler() { return new GlobeHttpResultHandler() { @Override - public void onHttpResultResponse(String httpResult) { - Timber.tag(TAG).w("GlobeHttpResultHandler------>" + httpResult); + public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) { + //这里可以先客户端一步拿到每一次http请求的结果,可以解析成json,做一些操作,如检测到token过期后 + //重新请求token,并重新执行请求 + try { + JSONArray array = new JSONArray(httpResult); + JSONObject object = (JSONObject) array.get(0); + String login = object.getString("login"); + String avatar_url = object.getString("avatar_url"); + Timber.tag(TAG).w("result ------>" + login + " || avatar_url------>" + avatar_url); + + } catch (JSONException e) { + e.printStackTrace(); + } + + //这里如果发现token过期,可以先请求最新的token,然后在拿新的token去重新请求之前的http请求 + // create a new request and modify it accordingly using the new token +// Request newRequest = chain.request().newBuilder().header("token", newToken) +// .build(); +// +// // retry the request +// +// originalResponse.body().close(); +// return chain.proceed(newRequest); + //如果需要返回新的结果,则直接把response参数返回出去 + return response; + } + }; + } + + @Override + protected ResponseErroListener getResponseErroListener() { + return new ResponseErroListener() { + @Override + public void handleResponseError(Context context, Exception e) { + Timber.tag(TAG).w("------------>" + e.getMessage()); + UiUtils.SnackbarText("net error"); } }; } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java b/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java index f8d5f7a8c04a62df4a0110b495a2fa119cb3cac6..edc8e4aac72c0a330e89cc6185a371dfbc18be69 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java @@ -2,6 +2,7 @@ package me.jessyan.mvparms.demo.di.component; import android.app.Application; +import com.google.gson.Gson; import com.jess.arms.di.module.AppModule; import com.jess.arms.di.module.ClientModule; import com.jess.arms.di.module.ImageModule; @@ -14,6 +15,7 @@ import me.jessyan.mvparms.demo.di.module.CacheModule; import me.jessyan.mvparms.demo.di.module.ServiceModule; import me.jessyan.mvparms.demo.mvp.model.api.cache.CacheManager; import me.jessyan.mvparms.demo.mvp.model.api.service.ServiceManager; +import me.jessyan.rxerrorhandler.core.RxErrorHandler; import okhttp3.OkHttpClient; /** @@ -30,8 +32,14 @@ public interface AppComponent { //缓存管理器 CacheManager cacheManager(); + //Rxjava错误处理管理类 + RxErrorHandler rxErrorHandler(); + OkHttpClient okHttpClient(); - //图片管理器 + //图片管理器,用于加载图片的管理类,默认使用glide,使用策略模式,可替换框架 ImageLoader imageLoader(); + + //gson + Gson gson(); } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java b/app/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..af9b946b10af79d9fa648d94ef1369e57a9a2369 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java @@ -0,0 +1,17 @@ +package me.jessyan.mvparms.demo.di.component; + +import com.jess.arms.di.scope.ActivityScope; + +import dagger.Component; +import me.jessyan.mvparms.demo.di.module.UserModule; +import me.jessyan.mvparms.demo.mvp.ui.activity.UserActivity; + +/** + * Created by jess on 9/4/16 11:17 + * Contact with jess.yan.effort@gmail.com + */ +@ActivityScope +@Component(modules = UserModule.class,dependencies = AppComponent.class) +public interface UserComponent { + void inject(UserActivity activity); +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java b/app/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java new file mode 100644 index 0000000000000000000000000000000000000000..59ae9f32b53cf0b8a9d19851618d9b529a37cc88 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java @@ -0,0 +1,35 @@ +package me.jessyan.mvparms.demo.di.module; + +import com.jess.arms.di.scope.ActivityScope; + +import dagger.Module; +import dagger.Provides; +import me.jessyan.mvparms.demo.mvp.contract.UserContract; +import me.jessyan.mvparms.demo.mvp.model.UserModel; +import me.jessyan.mvparms.demo.mvp.model.api.cache.CacheManager; +import me.jessyan.mvparms.demo.mvp.model.api.service.ServiceManager; + +/** + * Created by jess on 9/4/16 11:10 + * Contact with jess.yan.effort@gmail.com + */ +@Module +public class UserModule { + private UserContract.View view; + + public UserModule(UserContract.View view) { + this.view = view; + } + + @ActivityScope + @Provides + UserContract.View provideUserView(){ + return this.view; + } + + @ActivityScope + @Provides + UserContract.Model provideUserModel(ServiceManager serviceManager, CacheManager cacheManager){ + return new UserModel(serviceManager,cacheManager); + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java new file mode 100644 index 0000000000000000000000000000000000000000..8e66b4c537b6565e6dd99ad3b0017c2ec4a3df11 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/contract/UserContract.java @@ -0,0 +1,25 @@ +package me.jessyan.mvparms.demo.mvp.contract; + +import com.jess.arms.base.DefaultAdapter; +import com.jess.arms.mvp.BaseView; + +import java.util.List; + +import me.jessyan.mvparms.demo.mvp.model.entity.User; +import rx.Observable; + +/** + * Created by jess on 9/4/16 10:47 + * Contact with jess.yan.effort@gmail.com + */ +public interface UserContract { + interface View extends BaseView { + void setAdapter(DefaultAdapter adapter); + void startLoadMore(); + void endLoadMore(); + } + + interface Model { + Observable> getUsers(int lastIdQueried, boolean update); + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java new file mode 100644 index 0000000000000000000000000000000000000000..bef22aa3d98a48ee3996f8da2c1f46cab8222661 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/UserModel.java @@ -0,0 +1,51 @@ +package me.jessyan.mvparms.demo.mvp.model; + +import com.jess.arms.mvp.BaseModel; + +import java.util.List; + +import io.rx_cache.DynamicKey; +import io.rx_cache.EvictDynamicKey; +import io.rx_cache.Reply; +import me.jessyan.mvparms.demo.mvp.contract.UserContract; +import me.jessyan.mvparms.demo.mvp.model.api.cache.CacheManager; +import me.jessyan.mvparms.demo.mvp.model.api.cache.CommonCache; +import me.jessyan.mvparms.demo.mvp.model.api.service.CommonService; +import me.jessyan.mvparms.demo.mvp.model.api.service.ServiceManager; +import me.jessyan.mvparms.demo.mvp.model.entity.User; +import rx.Observable; +import rx.functions.Func1; + +/** + * Created by jess on 9/4/16 10:56 + * Contact with jess.yan.effort@gmail.com + */ +public class UserModel extends BaseModel implements UserContract.Model{ + public static final int USERS_PER_PAGE = 10; + private CommonService mCommonService; + private CommonCache mCommonCache; + + public UserModel(ServiceManager serviceManager, CacheManager cacheManager) { + super(serviceManager, cacheManager); + this.mCommonService = mServiceManager.getCommonService(); + this.mCommonCache = mCacheManager.getCommonCache(); + } + + + @Override + public Observable> getUsers(int lastIdQueried, boolean update) { + Observable> users = mCommonService + .getUsers(lastIdQueried, USERS_PER_PAGE); + //使用rxcache缓存,上拉刷新则不读取缓存,加载更多读取缓存 + return mCommonCache + .getUsers(users + ,new DynamicKey(lastIdQueried) + ,new EvictDynamicKey(update)) + .flatMap(new Func1>, Observable>>() { + @Override + public Observable> call(Reply> listReply) { + return Observable.just(listReply.getData()); + } + }); + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/Api.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/Api.java index ff7d679990a8bf5125d91caffa3dce2d08e030a9..11c4a249c44f15e4cb6b17ee946535f77312a94b 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/Api.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/Api.java @@ -5,5 +5,5 @@ package me.jessyan.mvparms.demo.mvp.model.api; * contact with jess.yan.effort@gmail.com */ public interface Api { - public static final String APP_DOMAIN = "http://baobab.wandoujia.com"; + public static final String APP_DOMAIN = "https://api.github.com"; } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CommonCache.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CommonCache.java index 96a932bae98654b834b49db292aec48077c308e7..3e1785d5594a49f681f164d412a7c1932be4afbf 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CommonCache.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/cache/CommonCache.java @@ -1,15 +1,13 @@ package me.jessyan.mvparms.demo.mvp.model.api.cache; +import java.util.List; import java.util.concurrent.TimeUnit; import io.rx_cache.DynamicKey; import io.rx_cache.EvictProvider; import io.rx_cache.LifeCache; import io.rx_cache.Reply; -import me.jessyan.mvparms.demo.mvp.model.entity.FindDetailEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.FindMoreEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.HomePicEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.HotStrategyEntity; +import me.jessyan.mvparms.demo.mvp.model.entity.User; import rx.Observable; /** @@ -18,17 +16,22 @@ import rx.Observable; */ public interface CommonCache { - @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) - Observable> getDailyList(Observable service, DynamicKey publishTime, EvictProvider provider); - - @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) - Observable> getFindMore(Observable service, DynamicKey id, EvictProvider provider); - - - @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) - Observable> getHotStrategy(Observable service, DynamicKey id, EvictProvider provider); @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) - Observable> getFindDetail(Observable service, DynamicKey id, EvictProvider provider); + Observable>> getUsers(Observable> oUsers, DynamicKey idLastUserQueried, EvictProvider evictProvider); + +// @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) +// Observable> getDailyList(Observable service, DynamicKey publishTime, EvictProvider provider); +// +// @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) +// Observable> getFindMore(Observable service, DynamicKey id, EvictProvider provider); +// +// +// @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) +// Observable> getHotStrategy(Observable service, DynamicKey id, EvictProvider provider); +// +// +// @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES) +// Observable> getFindDetail(Observable service, DynamicKey id, EvictProvider provider); } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/CommonService.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/CommonService.java index bc93125af9b53a484a06e87ce705f1c60689e40d..8ba21e3986b507075275ed2a97530b14270730c7 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/CommonService.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/api/service/CommonService.java @@ -1,10 +1,11 @@ package me.jessyan.mvparms.demo.mvp.model.api.service; -import me.jessyan.mvparms.demo.mvp.model.entity.FindDetailEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.FindMoreEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.HomePicEntity; -import me.jessyan.mvparms.demo.mvp.model.entity.HotStrategyEntity; +import java.util.List; + +import me.jessyan.mvparms.demo.mvp.model.entity.User; import retrofit2.http.GET; +import retrofit2.http.Headers; +import retrofit2.http.Query; import rx.Observable; /** @@ -13,15 +14,22 @@ import rx.Observable; */ public interface CommonService { - @GET("/api/v2/feed?num=2&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") - Observable getDailyList(); + String HEADER_API_VERSION = "Accept: application/vnd.github.v3+json"; - @GET("/api/v2/categories?udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") - Observable getFindMore(); + @Headers({HEADER_API_VERSION}) + @GET("/users") + Observable> getUsers(@Query("since") int lastIdQueried, @Query("per_page") int perPage); - @GET("/api/v3/ranklist?num=10&strategy=%s&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") - Observable getHotStrategy(); - @GET("/api/v3/videos?categoryName=%s&strategy=%s&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") - Observable getFindDetail(); +// @GET("/api/v2/feed?num=2&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") +// Observable getDailyList(); +// +// @GET("/api/v2/categories?udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") +// Observable getFindMore(); +// +// @GET("/api/v3/ranklist?num=10&strategy=%s&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") +// Observable getHotStrategy(); +// +// @GET("/api/v3/videos?categoryName=%s&strategy=%s&udid=26868b32e808498db32fd51fb422d00175e179df&vc=83") +// Observable getFindDetail(); } diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindDetailEntity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindDetailEntity.java deleted file mode 100755 index c6a51836fb62a6eb507fdb8168c4a49637b0c0a1..0000000000000000000000000000000000000000 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindDetailEntity.java +++ /dev/null @@ -1,507 +0,0 @@ -package me.jessyan.mvparms.demo.mvp.model.entity; - -import java.util.List; - -/** - * Created by xhb on 2016/3/5. - * 发现详情实体类 - */ -public class FindDetailEntity { - - /** - * itemList : [{"type":"video","data":{"id":5860,"date":1457107200000,"idx":1,"title":"用 2000 颗弹珠造一个音乐盒","description":"瑞典 33 岁音乐家 Martin Molin 用 14 个月、2000 颗弹珠,制造出了这台庞大的木制音乐盒。音乐盒可以演奏不同风格,这支由他和钢珠音乐盒组成的乐队叫 Wintergatan,将于 2016 年夏天开始巡演~From Wintergatan","category":"创意","duration":272,"playUrl":"http://baobab.wdjcdn.com/1457061051621W.mp4","playInfo":[{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1457061051621W.mp4"}],"consumption":{"collectionCount":1228,"shareCount":3007,"playCount":0,"replyCount":88},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/62adccef5fbaaac92f124461ce8e5506_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5860","forWeibo":"http://wandou.im/1m0xed"},"campaign":null}},{"type":"video","data":{"id":5666,"date":1456675200000,"idx":4,"title":"1976:世界随音波而动","description":"创意短片「1976」试图表达的是一场关于\u201c预感\u201d与\u201c声音\u201d的冥想。这部超现实主义的短片,营造了一个因为未知的变动、预感而不安的氛围,并且充分地让声音去掌控画面的节奏。From Loop","category":"创意","duration":98,"playUrl":"http://baobab.wdjcdn.com/1456304477849485802164.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456304748222_5666_854x480.mp4"},{"height":410,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456304477849485802164.mp4"}],"consumption":{"collectionCount":479,"shareCount":450,"playCount":0,"replyCount":18},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/358b7996e5b51bccc1407d18fa7aeee5_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/358b7996e5b51bccc1407d18fa7aeee5_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/9f4fbc676d5cf6052b2f1bddf319076d_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/358b7996e5b51bccc1407d18fa7aeee5_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5666","forWeibo":"http://wandou.im/1jnb3x"},"campaign":null}},{"type":"video","data":{"id":5564,"date":1456416000000,"idx":2,"title":"超萌创意全息投影:最迷你的厨师","description":"世界上最迷你的厨师又来了~这一次他去到了寒冷的大雪天里,为餐前无聊等餐的客人制作精美甜点。虽然人小,但是做出来的美食分量可不能小!快来看看他独特又有趣的制作过程吧!From Skullmapping","category":"创意","duration":190,"playUrl":"http://baobab.wdjcdn.com/1455968234865481297704.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455968670373_5564_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455968234865481297704.mp4"}],"consumption":{"collectionCount":1725,"shareCount":3995,"playCount":0,"replyCount":45},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/42acbea88107183ae11cfa7da474a811_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5564","forWeibo":"http://wandou.im/1ig7kq"},"campaign":null}},{"type":"video","data":{"id":5652,"date":1456329600000,"idx":1,"title":"人类,为什么要这么欺负一个机器人","description":"2 月 23 日,波士顿动力发布了新版机器人 Atlas 的实拍视频。新版的双足人形机器人,具有超强的稳定性。不仅可以在雪地淡定行走,还可以平静地面对人类过分的调戏。From Boston Dynamics","category":"创意","duration":297,"playUrl":"http://baobab.wdjcdn.com/14562919706254.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456292234792_5652_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14562919706254.mp4"}],"consumption":{"collectionCount":1800,"shareCount":5046,"playCount":0,"replyCount":152},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/37f38b49755013590dfe36cfb7c88504_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5652","forWeibo":"http://wandou.im/1jlmgw"},"campaign":null}},{"type":"video","data":{"id":5444,"date":1455897600000,"idx":3,"title":"创意定格:一场奇妙的邂逅","description":"「Shiny」这支基调欢快的创意定格动画里,讲述了一场有些奇妙的邂逅。美女偶遇打劫,然后英雄救美送上天降的珍宝。不过虽然钻石闪耀,然而还是抵不过真爱的光芒~ From Daniel Cloud Campos","category":"创意","duration":233,"playUrl":"http://baobab.wdjcdn.com/1455863692561482408606.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455863828938_5444_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455863692561482408606.mp4"}],"consumption":{"collectionCount":1768,"shareCount":2471,"playCount":0,"replyCount":44},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/3dad7dcf3411dc2eab3c4bba20e353f2_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3dad7dcf3411dc2eab3c4bba20e353f2_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/29bbda0ae97c644a8fc79196b7666fc6_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3dad7dcf3411dc2eab3c4bba20e353f2_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5444","forWeibo":"http://wandou.im/1i2pef"},"campaign":null}},{"type":"video","data":{"id":4958,"date":1455811200000,"idx":2,"title":"广告的未来:潜入你的梦境","description":"无处不在的广告,已经成为了我们生活的一部分。随着科技的发展,广告在未来还可以通过怎样的途径接触到大众呢?也许它们会潜入你的梦境里。这支概念短片描绘了当梦境被广告影响,会是什么样。From STUDIO SMACK","category":"创意","duration":132,"playUrl":"http://baobab.wdjcdn.com/1453343058293462927516.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453343235312_4958_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1453343058293462927516.mp4"}],"consumption":{"collectionCount":1119,"shareCount":1380,"playCount":0,"replyCount":47},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/1c1411e743301978c6a9efdae3d3240a_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/1c1411e743301978c6a9efdae3d3240a_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/73c56fa154869713f5c150581db8a18a_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/1c1411e743301978c6a9efdae3d3240a_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4958","forWeibo":"http://wandou.im/19xclr"},"campaign":null}},{"type":"video","data":{"id":4968,"date":1455638400000,"idx":4,"title":"靠自己飞翔:人力直升机","description":"三十年无人问鼎的 AHS 西科尔斯基国际航空大奖,终于被 Aerovelo 团队获得。他们研发的这款人力直升机虽然只飞行了 64.1 秒,3.3 米高。但他们在努力展示,人的力量有多么伟大。From Aerovelo Inc","category":"创意","duration":104,"playUrl":"http://baobab.wdjcdn.com/1453356441147A(5).mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453356923788_4968_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1453356441147A(5).mp4"}],"consumption":{"collectionCount":927,"shareCount":1714,"playCount":0,"replyCount":49},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/92c8ad89b179bf159fb5906261226412_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/92c8ad89b179bf159fb5906261226412_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/df726082895f16679d797369aa0c8bf2_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/92c8ad89b179bf159fb5906261226412_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4968","forWeibo":"http://wandou.im/19zbco"},"campaign":null}},{"type":"video","data":{"id":4780,"date":1455552000000,"idx":2,"title":"令人头皮发麻的视效短片:蜘蛛的网","description":"视效短片「Loom」(织布机)通过精细、极具张力与冲击的视觉画面,配以代入感极强的声效,描绘了一个蜘蛛成功捕获猎物的过程。虽然看得人头皮发麻,但仍是十分美而震撼。From Polynoid","category":"创意","duration":320,"playUrl":"http://baobab.wdjcdn.com/145249343727751788411.mp4","playInfo":[{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/145249343727751788411.mp4"}],"consumption":{"collectionCount":1612,"shareCount":1877,"playCount":0,"replyCount":79},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/b5a55d91712a7f85f43539aec2b7a223_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/b5a55d91712a7f85f43539aec2b7a223_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/f580ef0b49f143064fd739080a97f746_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/b5a55d91712a7f85f43539aec2b7a223_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4780","forWeibo":"http://wandou.im/17b1dt"},"campaign":null}},{"type":"video","data":{"id":4318,"date":1455422400000,"idx":5,"title":"周末号外丨点火好过节~","description":"对于甜蜜的情侣来说,每年的 2 月 14 日都是浪漫的情人节。可是并不是所有人都这么看的,不少人看来这天更像是火把节。短片中的点火虽然是圣诞传统,不过现在情人节里好像也有人这么过了呢~From Yule Log 2.0","category":"创意","duration":82,"playUrl":"http://baobab.wdjcdn.com/1451026206769454641049.mp4","playInfo":[{"height":480,"width":848,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1451026469044_4318_848x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1451026206769454641049.mp4"}],"consumption":{"collectionCount":290,"shareCount":155,"playCount":0,"replyCount":11},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/13dd20543c9e2d472ef61db112acd68c_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/13dd20543c9e2d472ef61db112acd68c_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/142dafd02a5d6945f37fabdddbb0ee9d_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/13dd20543c9e2d472ef61db112acd68c_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4318","forWeibo":"http://wandou.im/13cdwh"},"campaign":null}},{"type":"video","data":{"id":4580,"date":1455336000000,"idx":4,"title":"周末号外丨迷幻花海:Slowly Rising","description":"荷兰音乐制作人 BEATSOFREEN 这首 Slowly Rising(缓慢生长)的 MV 由日本的 Hideki Inaba 创作。画面中源源不断的动植物混合体,创作出了花海般涌动的迷幻景象。From kanahebi","category":"创意","duration":210,"playUrl":"http://baobab.wdjcdn.com/1452062194844429162097.mp4","playInfo":[{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1452062194844429162097.mp4"}],"consumption":{"collectionCount":542,"shareCount":562,"playCount":0,"replyCount":24},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/3ec2288c8d0599339bad174785aba98e_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3ec2288c8d0599339bad174785aba98e_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/d94bebc32d6fbc0ff96a247622752ec7_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3ec2288c8d0599339bad174785aba98e_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4580","forWeibo":"http://wandou.im/161hwj"},"campaign":null}}] - * count : 10 - * total : 0 - * nextPageUrl : http://baobab.wandoujia.com/api/v3/videos?start=10&num=10&categoryName=%E5%88%9B%E6%84%8F&strategy=date - */ - - private int count; - private int total; - private String nextPageUrl; - /** - * type : video - * data : {"id":5860,"date":1457107200000,"idx":1,"title":"用 2000 颗弹珠造一个音乐盒","description":"瑞典 33 岁音乐家 Martin Molin 用 14 个月、2000 颗弹珠,制造出了这台庞大的木制音乐盒。音乐盒可以演奏不同风格,这支由他和钢珠音乐盒组成的乐队叫 Wintergatan,将于 2016 年夏天开始巡演~From Wintergatan","category":"创意","duration":272,"playUrl":"http://baobab.wdjcdn.com/1457061051621W.mp4","playInfo":[{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1457061051621W.mp4"}],"consumption":{"collectionCount":1228,"shareCount":3007,"playCount":0,"replyCount":88},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/62adccef5fbaaac92f124461ce8e5506_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5860","forWeibo":"http://wandou.im/1m0xed"},"campaign":null} - */ - - private List itemList; - - public void setCount(int count) { - this.count = count; - } - - public void setTotal(int total) { - this.total = total; - } - - public void setNextPageUrl(String nextPageUrl) { - this.nextPageUrl = nextPageUrl; - } - - public void setItemList(List itemList) { - this.itemList = itemList; - } - - public int getCount() { - return count; - } - - public int getTotal() { - return total; - } - - public String getNextPageUrl() { - return nextPageUrl; - } - - public List getItemList() { - return itemList; - } - - public static class ItemListEntity { - private String type; - /** - * id : 5860 - * date : 1457107200000 - * idx : 1 - * title : 用 2000 颗弹珠造一个音乐盒 - * description : 瑞典 33 岁音乐家 Martin Molin 用 14 个月、2000 颗弹珠,制造出了这台庞大的木制音乐盒。音乐盒可以演奏不同风格,这支由他和钢珠音乐盒组成的乐队叫 Wintergatan,将于 2016 年夏天开始巡演~From Wintergatan - * category : 创意 - * duration : 272 - * playUrl : http://baobab.wdjcdn.com/1457061051621W.mp4 - * playInfo : [{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1457061051621W.mp4"}] - * consumption : {"collectionCount":1228,"shareCount":3007,"playCount":0,"replyCount":88} - * promotion : null - * waterMarks : null - * provider : {"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"} - * author : null - * adTrack : null - * shareAdTrack : null - * favoriteAdTrack : null - * webAdTrack : null - * cover : {"feed":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/62adccef5fbaaac92f124461ce8e5506_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg"} - * webUrl : {"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5860","forWeibo":"http://wandou.im/1m0xed"} - * campaign : null - */ - - private DataEntity data; - - public void setType(String type) { - this.type = type; - } - - public void setData(DataEntity data) { - this.data = data; - } - - public String getType() { - return type; - } - - public DataEntity getData() { - return data; - } - - public static class DataEntity { - private int id; - private long date; - private int idx; - private String title; - private String description; - private String category; - private int duration; - private String playUrl; - /** - * collectionCount : 1228 - * shareCount : 3007 - * playCount : 0 - * replyCount : 88 - */ - - private ConsumptionEntity consumption; - private Object promotion; - private Object waterMarks; - /** - * name : YouTube - * alias : youtube - * icon : http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png - */ - - private ProviderEntity provider; - private Object author; - private Object adTrack; - private Object shareAdTrack; - private Object favoriteAdTrack; - private Object webAdTrack; - /** - * feed : http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg - * detail : http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg - * blurred : http://img.wdjimg.com/image/video/62adccef5fbaaac92f124461ce8e5506_0_0.jpeg - * sharing : http://img.wdjimg.com/image/video/cfc2ffd94f4c2234ff9f77eb99205791_0_0.jpeg - */ - - private CoverEntity cover; - /** - * raw : http://www.wandoujia.com/eyepetizer/detail.html?vid=5860 - * forWeibo : http://wandou.im/1m0xed - */ - - private WebUrlEntity webUrl; - private Object campaign; - /** - * height : 720 - * width : 1280 - * name : 高清 - * type : high - * url : http://baobab.wdjcdn.com/1457061051621W.mp4 - */ - - private List playInfo; - - public void setId(int id) { - this.id = id; - } - - public void setDate(long date) { - this.date = date; - } - - public void setIdx(int idx) { - this.idx = idx; - } - - public void setTitle(String title) { - this.title = title; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCategory(String category) { - this.category = category; - } - - public void setDuration(int duration) { - this.duration = duration; - } - - public void setPlayUrl(String playUrl) { - this.playUrl = playUrl; - } - - public void setConsumption(ConsumptionEntity consumption) { - this.consumption = consumption; - } - - public void setPromotion(Object promotion) { - this.promotion = promotion; - } - - public void setWaterMarks(Object waterMarks) { - this.waterMarks = waterMarks; - } - - public void setProvider(ProviderEntity provider) { - this.provider = provider; - } - - public void setAuthor(Object author) { - this.author = author; - } - - public void setAdTrack(Object adTrack) { - this.adTrack = adTrack; - } - - public void setShareAdTrack(Object shareAdTrack) { - this.shareAdTrack = shareAdTrack; - } - - public void setFavoriteAdTrack(Object favoriteAdTrack) { - this.favoriteAdTrack = favoriteAdTrack; - } - - public void setWebAdTrack(Object webAdTrack) { - this.webAdTrack = webAdTrack; - } - - public void setCover(CoverEntity cover) { - this.cover = cover; - } - - public void setWebUrl(WebUrlEntity webUrl) { - this.webUrl = webUrl; - } - - public void setCampaign(Object campaign) { - this.campaign = campaign; - } - - public void setPlayInfo(List playInfo) { - this.playInfo = playInfo; - } - - public int getId() { - return id; - } - - public long getDate() { - return date; - } - - public int getIdx() { - return idx; - } - - public String getTitle() { - return title; - } - - public String getDescription() { - return description; - } - - public String getCategory() { - return category; - } - - public int getDuration() { - return duration; - } - - public String getPlayUrl() { - return playUrl; - } - - public ConsumptionEntity getConsumption() { - return consumption; - } - - public Object getPromotion() { - return promotion; - } - - public Object getWaterMarks() { - return waterMarks; - } - - public ProviderEntity getProvider() { - return provider; - } - - public Object getAuthor() { - return author; - } - - public Object getAdTrack() { - return adTrack; - } - - public Object getShareAdTrack() { - return shareAdTrack; - } - - public Object getFavoriteAdTrack() { - return favoriteAdTrack; - } - - public Object getWebAdTrack() { - return webAdTrack; - } - - public CoverEntity getCover() { - return cover; - } - - public WebUrlEntity getWebUrl() { - return webUrl; - } - - public Object getCampaign() { - return campaign; - } - - public List getPlayInfo() { - return playInfo; - } - - public static class ConsumptionEntity { - private int collectionCount; - private int shareCount; - private int playCount; - private int replyCount; - - public void setCollectionCount(int collectionCount) { - this.collectionCount = collectionCount; - } - - public void setShareCount(int shareCount) { - this.shareCount = shareCount; - } - - public void setPlayCount(int playCount) { - this.playCount = playCount; - } - - public void setReplyCount(int replyCount) { - this.replyCount = replyCount; - } - - public int getCollectionCount() { - return collectionCount; - } - - public int getShareCount() { - return shareCount; - } - - public int getPlayCount() { - return playCount; - } - - public int getReplyCount() { - return replyCount; - } - } - - public static class ProviderEntity { - private String name; - private String alias; - private String icon; - - public void setName(String name) { - this.name = name; - } - - public void setAlias(String alias) { - this.alias = alias; - } - - public void setIcon(String icon) { - this.icon = icon; - } - - public String getName() { - return name; - } - - public String getAlias() { - return alias; - } - - public String getIcon() { - return icon; - } - } - - public static class CoverEntity { - private String feed; - private String detail; - private String blurred; - private String sharing; - - public void setFeed(String feed) { - this.feed = feed; - } - - public void setDetail(String detail) { - this.detail = detail; - } - - public void setBlurred(String blurred) { - this.blurred = blurred; - } - - public void setSharing(String sharing) { - this.sharing = sharing; - } - - public String getFeed() { - return feed; - } - - public String getDetail() { - return detail; - } - - public String getBlurred() { - return blurred; - } - - public String getSharing() { - return sharing; - } - } - - public static class WebUrlEntity { - private String raw; - private String forWeibo; - - public void setRaw(String raw) { - this.raw = raw; - } - - public void setForWeibo(String forWeibo) { - this.forWeibo = forWeibo; - } - - public String getRaw() { - return raw; - } - - public String getForWeibo() { - return forWeibo; - } - } - - public static class PlayInfoEntity { - private int height; - private int width; - private String name; - private String type; - private String url; - - public void setHeight(int height) { - this.height = height; - } - - public void setWidth(int width) { - this.width = width; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getHeight() { - return height; - } - - public int getWidth() { - return width; - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } - - public String getUrl() { - return url; - } - } - } - } -} - diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindMoreEntity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindMoreEntity.java deleted file mode 100755 index a87ea5274ff5e8742b23efd50c396945be69a04c..0000000000000000000000000000000000000000 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/FindMoreEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package me.jessyan.mvparms.demo.mvp.model.entity; - -/** - * Created by xhb on 2016/3/2. - * 发现更多实体类 - */ -public class FindMoreEntity { - /** - * id : 2 - * name : 创意 - * alias : null - * bgPicture : http://img.wdjimg.com/image/video/e8f7e96c58348e4dd6daede64721d02d_0_0.jpeg - * bgColor : - */ - - private int id; - private String name; - private Object alias; - private String bgPicture; - private String bgColor; - - public void setId(int id) { - this.id = id; - } - - public void setName(String name) { - this.name = name; - } - - public void setAlias(Object alias) { - this.alias = alias; - } - - public void setBgPicture(String bgPicture) { - this.bgPicture = bgPicture; - } - - public void setBgColor(String bgColor) { - this.bgColor = bgColor; - } - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public Object getAlias() { - return alias; - } - - public String getBgPicture() { - return bgPicture; - } - - public String getBgColor() { - return bgColor; - } -} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HomePicEntity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HomePicEntity.java deleted file mode 100755 index 99029b52e3e80ced6a1a95a6e38b98a322b67538..0000000000000000000000000000000000000000 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HomePicEntity.java +++ /dev/null @@ -1,568 +0,0 @@ -package me.jessyan.mvparms.demo.mvp.model.entity; - -import java.io.Serializable; -import java.util.List; - -/** - * Created by ASUS on 2016/2/29. - */ -public class HomePicEntity { - - /** - * date : 1456675200000 - * publishTime : 1456675200000 - * type : normal - * count : 6 - * itemList : [{"type":"video","data":{"id":5754,"date":1456675200000,"idx":1,"title":"奥斯卡号外丨恭喜小李子终于申奥成功","description":"恭喜小李子结束了长达 20 年的陪跑~最新采访小李时,谈到为何投身环保,同时还坚持演戏。他说作为明星很多时候说话不受重视,但至少站出来说话能被听到,如果不演戏就没人听他说这些环保的事了。From Burger Fiction","category":"综合","duration":454,"playUrl":"http://baobab.wdjcdn.com/1456717752764486381173.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456718039738_5754_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456717752764486381173.mp4"}],"consumption":{"collectionCount":602,"shareCount":2628,"playCount":0,"replyCount":51},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/e7686329d482d4bfa939acbcd53060ea_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5754","forWeibo":"http://wandou.im/1l1ibm"},"campaign":null}}] - */ - - private String nextPageUrl; - - public String getNextPageUrl() { - return nextPageUrl; - } - - public void setNextPageUrl(String nextPageUrl) { - this.nextPageUrl = nextPageUrl; - } - - private List issueList; - - public void setIssueList(List issueList) { - this.issueList = issueList; - } - - public List getIssueList() { - return issueList; - } - - public static class IssueListEntity { - private long date; - private long publishTime; - private String type; - private int count; - /** - * type : video - * data : {"id":5754,"date":1456675200000,"idx":1,"title":"奥斯卡号外丨恭喜小李子终于申奥成功","description":"恭喜小李子结束了长达 20 年的陪跑~最新采访小李时,谈到为何投身环保,同时还坚持演戏。他说作为明星很多时候说话不受重视,但至少站出来说话能被听到,如果不演戏就没人听他说这些环保的事了。From Burger Fiction","category":"综合","duration":454,"playUrl":"http://baobab.wdjcdn.com/1456717752764486381173.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456718039738_5754_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456717752764486381173.mp4"}],"consumption":{"collectionCount":602,"shareCount":2628,"playCount":0,"replyCount":51},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/e7686329d482d4bfa939acbcd53060ea_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5754","forWeibo":"http://wandou.im/1l1ibm"},"campaign":null} - */ - - private List itemList; - - public void setDate(long date) { - this.date = date; - } - - public void setPublishTime(long publishTime) { - this.publishTime = publishTime; - } - - public void setType(String type) { - this.type = type; - } - - public void setCount(int count) { - this.count = count; - } - - public void setItemList(List itemList) { - this.itemList = itemList; - } - - public long getDate() { - return date; - } - - public long getPublishTime() { - return publishTime; - } - - public String getType() { - return type; - } - - public int getCount() { - return count; - } - - public List getItemList() { - return itemList; - } - - public static class ItemListEntity implements Serializable { - private String type; - private String image; - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - /** - * id : 5754 - * date : 1456675200000 - * idx : 1 - * title : 奥斯卡号外丨恭喜小李子终于申奥成功 - * description : 恭喜小李子结束了长达 20 年的陪跑~最新采访小李时,谈到为何投身环保,同时还坚持演戏。他说作为明星很多时候说话不受重视,但至少站出来说话能被听到,如果不演戏就没人听他说这些环保的事了。From Burger Fiction - * category : 综合 - * duration : 454 - * playUrl : http://baobab.wdjcdn.com/1456717752764486381173.mp4 - * playInfo : [{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456718039738_5754_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456717752764486381173.mp4"}] - * consumption : {"collectionCount":602,"shareCount":2628,"playCount":0,"replyCount":51} - * promotion : null - * waterMarks : null - * provider : {"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"} - * author : null - * adTrack : null - * shareAdTrack : null - * favoriteAdTrack : null - * webAdTrack : null - * cover : {"feed":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/e7686329d482d4bfa939acbcd53060ea_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg"} - * webUrl : {"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5754","forWeibo":"http://wandou.im/1l1ibm"} - * campaign : null - */ - - private DataEntity data; - - public void setType(String type) { - this.type = type; - } - - public void setData(DataEntity data) { - this.data = data; - } - - public String getType() { - return type; - } - - public DataEntity getData() { - return data; - } - - public static class DataEntity { - private String image; - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - private int id; - private long date; - private int idx; - private String title; - private String description; - private String category; - private int duration; - private String playUrl; - private String text; - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - /** - * collectionCount : 602 - * shareCount : 2628 - * playCount : 0 - * replyCount : 51 - */ - - private ConsumptionEntity consumption; - private Object promotion; - private Object waterMarks; - /** - * name : Vimeo - * alias : vimeo - * icon : http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png - */ - - private ProviderEntity provider; - private Object author; - private Object adTrack; - private Object shareAdTrack; - private Object favoriteAdTrack; - private Object webAdTrack; - /** - * feed : http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg - * detail : http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg - * blurred : http://img.wdjimg.com/image/video/e7686329d482d4bfa939acbcd53060ea_0_0.jpeg - * sharing : http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg - */ - - private CoverEntity cover; - /** - * raw : http://www.wandoujia.com/eyepetizer/detail.html?vid=5754 - * forWeibo : http://wandou.im/1l1ibm - */ - - private WebUrlEntity webUrl; - private Object campaign; - /** - * height : 480 - * width : 854 - * name : 标清 - * type : normal - * url : http://baobab.wdjcdn.com/1456718039738_5754_854x480.mp4 - */ - - private List playInfo; - - public void setId(int id) { - this.id = id; - } - - public void setDate(long date) { - this.date = date; - } - - public void setIdx(int idx) { - this.idx = idx; - } - - public void setTitle(String title) { - this.title = title; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCategory(String category) { - this.category = category; - } - - public void setDuration(int duration) { - this.duration = duration; - } - - public void setPlayUrl(String playUrl) { - this.playUrl = playUrl; - } - - public void setConsumption(ConsumptionEntity consumption) { - this.consumption = consumption; - } - - public void setPromotion(Object promotion) { - this.promotion = promotion; - } - - public void setWaterMarks(Object waterMarks) { - this.waterMarks = waterMarks; - } - - public void setProvider(ProviderEntity provider) { - this.provider = provider; - } - - public void setAuthor(Object author) { - this.author = author; - } - - public void setAdTrack(Object adTrack) { - this.adTrack = adTrack; - } - - public void setShareAdTrack(Object shareAdTrack) { - this.shareAdTrack = shareAdTrack; - } - - public void setFavoriteAdTrack(Object favoriteAdTrack) { - this.favoriteAdTrack = favoriteAdTrack; - } - - public void setWebAdTrack(Object webAdTrack) { - this.webAdTrack = webAdTrack; - } - - public void setCover(CoverEntity cover) { - this.cover = cover; - } - - public void setWebUrl(WebUrlEntity webUrl) { - this.webUrl = webUrl; - } - - public void setCampaign(Object campaign) { - this.campaign = campaign; - } - - public void setPlayInfo(List playInfo) { - this.playInfo = playInfo; - } - - public int getId() { - return id; - } - - public long getDate() { - return date; - } - - public int getIdx() { - return idx; - } - - public String getTitle() { - return title; - } - - public String getDescription() { - return description; - } - - public String getCategory() { - return category; - } - - public int getDuration() { - return duration; - } - - public String getPlayUrl() { - return playUrl; - } - - public ConsumptionEntity getConsumption() { - return consumption; - } - - public Object getPromotion() { - return promotion; - } - - public Object getWaterMarks() { - return waterMarks; - } - - public ProviderEntity getProvider() { - return provider; - } - - public Object getAuthor() { - return author; - } - - public Object getAdTrack() { - return adTrack; - } - - public Object getShareAdTrack() { - return shareAdTrack; - } - - public Object getFavoriteAdTrack() { - return favoriteAdTrack; - } - - public Object getWebAdTrack() { - return webAdTrack; - } - - public CoverEntity getCover() { - return cover; - } - - public WebUrlEntity getWebUrl() { - return webUrl; - } - - public Object getCampaign() { - return campaign; - } - - public List getPlayInfo() { - return playInfo; - } - - public static class ConsumptionEntity { - private int collectionCount; - private int shareCount; - private int playCount; - private int replyCount; - - public void setCollectionCount(int collectionCount) { - this.collectionCount = collectionCount; - } - - public void setShareCount(int shareCount) { - this.shareCount = shareCount; - } - - public void setPlayCount(int playCount) { - this.playCount = playCount; - } - - public void setReplyCount(int replyCount) { - this.replyCount = replyCount; - } - - public int getCollectionCount() { - return collectionCount; - } - - public int getShareCount() { - return shareCount; - } - - public int getPlayCount() { - return playCount; - } - - public int getReplyCount() { - return replyCount; - } - } - - public static class ProviderEntity { - private String name; - private String alias; - private String icon; - - public void setName(String name) { - this.name = name; - } - - public void setAlias(String alias) { - this.alias = alias; - } - - public void setIcon(String icon) { - this.icon = icon; - } - - public String getName() { - return name; - } - - public String getAlias() { - return alias; - } - - public String getIcon() { - return icon; - } - } - - public static class CoverEntity { - private String feed; - private String detail; - private String blurred; - private String sharing; - - public void setFeed(String feed) { - this.feed = feed; - } - - public void setDetail(String detail) { - this.detail = detail; - } - - public void setBlurred(String blurred) { - this.blurred = blurred; - } - - public void setSharing(String sharing) { - this.sharing = sharing; - } - - public String getFeed() { - return feed; - } - - public String getDetail() { - return detail; - } - - public String getBlurred() { - return blurred; - } - - public String getSharing() { - return sharing; - } - } - - public static class WebUrlEntity { - private String raw; - private String forWeibo; - - public void setRaw(String raw) { - this.raw = raw; - } - - public void setForWeibo(String forWeibo) { - this.forWeibo = forWeibo; - } - - public String getRaw() { - return raw; - } - - public String getForWeibo() { - return forWeibo; - } - } - - public static class PlayInfoEntity { - private int height; - private int width; - private String name; - private String type; - private String url; - - public void setHeight(int height) { - this.height = height; - } - - public void setWidth(int width) { - this.width = width; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getHeight() { - return height; - } - - public int getWidth() { - return width; - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } - - public String getUrl() { - return url; - } - } - } - } - } -} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HotStrategyEntity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HotStrategyEntity.java deleted file mode 100755 index 89793dc529fd4a80adffc4bbb9a3c66b3c5a8282..0000000000000000000000000000000000000000 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/HotStrategyEntity.java +++ /dev/null @@ -1,507 +0,0 @@ -package me.jessyan.mvparms.demo.mvp.model.entity; - -import java.util.List; - -/** - * Created by xhb on 2016/3/3. - * 热门排行实体类 - */ -public class HotStrategyEntity { - - - /** - * itemList : [{"type":"video","data":{"id":5630,"date":1456416000000,"idx":1,"title":"我为什么要健身?","description":"我为什么要健身?难道真的只是为了减肥吗?短片「如何四步轻松减肥」中,男主角的故事并不只是一个肤浅的减肥励志故事。在健身房里流了一年的汗,不仅是为了外表,也是为了内心。From Benjamin Berman","category":"剧情","duration":423,"playUrl":"http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456459550061_5630_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4"}],"consumption":{"collectionCount":4983,"shareCount":8792,"playCount":0,"replyCount":119},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/07cbb50d55041eb5e97f5091cac59d64_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5630","forWeibo":"http://wandou.im/1jbvwz"},"campaign":null}},{"type":"video","data":{"id":5652,"date":1456329600000,"idx":1,"title":"人类,为什么要这么欺负一个机器人","description":"2 月 23 日,波士顿动力发布了新版机器人 Atlas 的实拍视频。新版的双足人形机器人,具有超强的稳定性。不仅可以在雪地淡定行走,还可以平静地面对人类过分的调戏。From Boston Dynamics","category":"创意","duration":297,"playUrl":"http://baobab.wdjcdn.com/14562919706254.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456292234792_5652_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14562919706254.mp4"}],"consumption":{"collectionCount":1707,"shareCount":4865,"playCount":0,"replyCount":150},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/37f38b49755013590dfe36cfb7c88504_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/8de93be9273b18116f03656368becc97_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5652","forWeibo":"http://wandou.im/1jlmgw"},"campaign":null}},{"type":"video","data":{"id":5754,"date":1456675200000,"idx":1,"title":"奥斯卡号外丨恭喜小李子终于申奥成功","description":"恭喜小李子结束了长达 20 年的陪跑~最新采访小李时,谈到为何投身环保,同时还坚持演戏。他说作为明星很多时候说话不受重视,但至少站出来说话能被听到,如果不演戏就没人听他说这些环保的事了。From Burger Fiction","category":"综合","duration":454,"playUrl":"http://baobab.wdjcdn.com/1456717752764486381173.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456718039738_5754_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456717752764486381173.mp4"}],"consumption":{"collectionCount":1476,"shareCount":4651,"playCount":0,"replyCount":83},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/e7686329d482d4bfa939acbcd53060ea_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/3141c1e1a154d17a5742eb9ab4a8723b_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5754","forWeibo":"http://wandou.im/1l1ibm"},"campaign":null}},{"type":"video","data":{"id":5746,"date":1456761600000,"idx":1,"title":"奥斯卡最佳动画短片「熊的故事」","description":"这部来自智利的作品「Bear Story」(熊的故事)刚刚获得了奥斯卡最佳动画短片。故事灵感来自导演的祖父被驱逐出境的经历,熊的遭遇隐喻了智利独裁政治下带来的家庭分裂与伤害。From Patricio Ramos","category":"动画","duration":618,"playUrl":"http://baobab.wdjcdn.com/1456734464766B(13).mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456735125658_5746_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456734464766B(13).mp4"}],"consumption":{"collectionCount":1798,"shareCount":3769,"playCount":0,"replyCount":59},"promotion":null,"waterMarks":null,"provider":{"name":"哔哩哔哩动画","alias":"bilibili","icon":"http://img.wdjimg.com/mms/icon/v1/4/cd/b968890a2b3e9ab5ae234175681f8cd4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/c311164a1d9def0e6d4d64945fdd3af1_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/c311164a1d9def0e6d4d64945fdd3af1_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/efd5fea0170ff2922a1bdf4cad6e7423_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/c311164a1d9def0e6d4d64945fdd3af1_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5746","forWeibo":"http://wandou.im/1kskss"},"campaign":null}},{"type":"video","data":{"id":5734,"date":1456502400000,"idx":1,"title":"一首歌看完第 88 届奥斯卡提名","description":"UP 主胡雨果自制,按照提名颁奖的顺序来排的先后,BGM 是提名歌曲,「The Weeknd」的「Earned it」。祝辛勤的电影工作者们好运~From @InkHugo","category":"综合","duration":407,"playUrl":"http://baobab.wdjcdn.com/14564977406580.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456498049022_5734_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14564977406580.mp4"}],"consumption":{"collectionCount":1588,"shareCount":3241,"playCount":0,"replyCount":40},"promotion":null,"waterMarks":null,"provider":{"name":"哔哩哔哩动画","alias":"bilibili","icon":"http://img.wdjimg.com/mms/icon/v1/4/cd/b968890a2b3e9ab5ae234175681f8cd4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/ca20321e8407ee9d3d6e249fc8eb7b6e_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/ca20321e8407ee9d3d6e249fc8eb7b6e_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/49c3d0fd2c562cdfe3c0a57540e1234d_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/ca20321e8407ee9d3d6e249fc8eb7b6e_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5734","forWeibo":"http://wandou.im/1kchm3"},"campaign":null}},{"type":"video","data":{"id":5570,"date":1456329600000,"idx":2,"title":"奥斯卡最佳动画短片提名:今夕何夕","description":"这部获得今年奥斯卡最佳动画短片提名的「World of Tomorrow」(今夕何夕)讲述了一个小女孩的一场离奇时空记忆之旅。其中小女孩的配音是导演侄女在玩耍的过程中即兴录制的。From 大家字幕组","category":"动画","duration":989,"playUrl":"http://baobab.wdjcdn.com/1456117847747a_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456118071092_5570_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456117847747a_x264.mp4"}],"consumption":{"collectionCount":2581,"shareCount":3044,"playCount":0,"replyCount":71},"promotion":null,"waterMarks":null,"provider":{"name":"哔哩哔哩动画","alias":"bilibili","icon":"http://img.wdjimg.com/mms/icon/v1/4/cd/b968890a2b3e9ab5ae234175681f8cd4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/93414798d8ab772595eb53a95f001397_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/93414798d8ab772595eb53a95f001397_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/5f2ce841605a943008b8c1281fb6218b_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/93414798d8ab772595eb53a95f001397_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5570","forWeibo":"http://wandou.im/1iyipp"},"campaign":null}},{"type":"video","data":{"id":5564,"date":1456416000000,"idx":2,"title":"超萌创意全息投影:最迷你的厨师","description":"世界上最迷你的厨师又来了~这一次他去到了寒冷的大雪天里,为餐前无聊等餐的客人制作精美甜点。虽然人小,但是做出来的美食分量可不能小!快来看看他独特又有趣的制作过程吧!From Skullmapping","category":"创意","duration":190,"playUrl":"http://baobab.wdjcdn.com/1455968234865481297704.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455968670373_5564_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455968234865481297704.mp4"}],"consumption":{"collectionCount":1589,"shareCount":3753,"playCount":0,"replyCount":45},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/42acbea88107183ae11cfa7da474a811_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/8ad1f07d2a2a893a55360968e4ac26c3_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5564","forWeibo":"http://wandou.im/1ig7kq"},"campaign":null}},{"type":"video","data":{"id":4418,"date":1456675200000,"idx":2,"title":"经典温情广告:记忆月台","description":"这支经典的品牌广告是金士顿 2013 年的年度广告片,讲述了一段跨越了时间、关于守候、关于记忆的浪漫爱情故事。广告不仅改编自伦敦的真实事件,更是耗费重金打造了伦敦地铁的场景。From Kingston Technology","category":"广告","duration":452,"playUrl":"http://baobab.wdjcdn.com/1456317490140jiyiyuetai_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456317825030_4418_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456317490140jiyiyuetai_x264.mp4"}],"consumption":{"collectionCount":1793,"shareCount":3941,"playCount":0,"replyCount":80},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/7ba4f1351d788f6afe9ff3726f39e949_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/7ba4f1351d788f6afe9ff3726f39e949_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/4240d724e6f114fa85f470cd4c76ad1a_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/7ba4f1351d788f6afe9ff3726f39e949_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4418","forWeibo":"http://wandou.im/147in2"},"campaign":null}},{"type":"video","data":{"id":5410,"date":1456588800000,"idx":1,"title":"电影时光:致电影的一封情书","description":"对于普通大众来说,一部电影可以在感官和精神上带来的欢愉、紧张、投入,比这部电影拿过什么名头响亮的大奖其实要重要的多。回复\u201c电影情书\u201d到公众号「开眼Eyepetizer」,get 作者的电影豆列~ From @握不住的灵魂","category":"综合","duration":427,"playUrl":"http://baobab.wdjcdn.com/1456665467509qingshu.mp4","playInfo":[],"consumption":{"collectionCount":1960,"shareCount":3031,"playCount":0,"replyCount":108},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/f9a4bc762929717192b7140386744bec_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/f9a4bc762929717192b7140386744bec_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/4d254b9c816905b16ba3e543091e6709_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/f9a4bc762929717192b7140386744bec_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5410","forWeibo":"http://wandou.im/1hrbss"},"campaign":null}},{"type":"video","data":{"id":5670,"date":1456502400000,"idx":2,"title":"是什么让丧尸重新焕发生命的光彩","description":"这支广告将可能在以下危急情况,拯救你的生命。当你被丧尸追逐,或是不小心被变成了丧尸可是又想回归人类,都可以使用广告中的这款神奇产品。简单,好用~丧尸也能再获新生~From brooksrunning","category":"广告","duration":195,"playUrl":"http://baobab.wdjcdn.com/1456316686552The.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456316844252_5670_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456316686552The.mp4"}],"consumption":{"collectionCount":1126,"shareCount":3060,"playCount":0,"replyCount":86},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/5fe2acc12ff9a9d90377e90cfb87e43f_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/5fe2acc12ff9a9d90377e90cfb87e43f_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/2ae31d9b1e432cc5e89d177280b3de9b_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/5fe2acc12ff9a9d90377e90cfb87e43f_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5670","forWeibo":"http://wandou.im/1jpc5g"},"campaign":null}},{"type":"video","data":{"id":5420,"date":1456416000000,"idx":3,"title":"经典粤式口味:酱油鸡","description":"知咚杨妈妈的拿手好菜酱油鸡,口感丰富爽嫩,是经典的粤式口味。这道喜庆的家常菜,看起来难度很大,没想到制作起来却是非常简单好上手。只要细心,你也可以掌握这美味的秘诀。From @知咚","category":"开胃","duration":133,"playUrl":"http://baobab.wdjcdn.com/1455782903700jy.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455783304983_5420_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455782903700jy.mp4"}],"consumption":{"collectionCount":1605,"shareCount":1832,"playCount":0,"replyCount":36},"promotion":null,"waterMarks":null,"provider":{"name":"腾讯","alias":"qq","icon":"http://img.wdjimg.com/mms/icon/v1/4/2c/def8a8aa0971f93973280f7f75c772c4_256_256.png"},"author":{"id":6,"name":"知咚","link":"http://weibo.com/4cactuses"},"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/b43c015da8bd98e017db9c3f29b7d742_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/b43c015da8bd98e017db9c3f29b7d742_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/4de3b2a36059c8513c15e8d94dc20550_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/b43c015da8bd98e017db9c3f29b7d742_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5420","forWeibo":"http://wandou.im/1hs93l"},"campaign":null}},{"type":"video","data":{"id":4840,"date":1456761600000,"idx":2,"title":"Hope Pro 4:山地骑行魅影","description":"英国制造的 Hope Pro2 花鼓因为其卓越的性能、灵活丰富的转换规格而深受自行车迷喜爱。Hope Pro 4 年初发布,并且测试是由山地车大神 Adams Brayton 带来的精彩山地速降。From hopetech","category":"运动","duration":207,"playUrl":"http://baobab.wdjcdn.com/1452692815358460564181.mp4","playInfo":[],"consumption":{"collectionCount":683,"shareCount":2063,"playCount":0,"replyCount":50},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/930cd110020b97e3ede9335678dab171_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/930cd110020b97e3ede9335678dab171_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/b9b8af727c99ac106dbeaa95cea3e8ba_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/930cd110020b97e3ede9335678dab171_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4840","forWeibo":"http://wandou.im/17vp77"},"campaign":null}},{"type":"video","data":{"id":4468,"date":1455465600000,"idx":1,"title":"ROLLIN' WILD 圆滚滚的\u2026\u2026","description":"每逢佳节胖三斤,过完年的你是不是也\u2026\u2026 网络上流传过不少节前节后身形对比图,然而直到看到这一组萌翻了的动画小短片,才深刻感受到,啊,这就是过完年的我啊。#一条不太友好的视频描述 From ROLLIN' WILD","category":"动画","duration":213,"playUrl":"http://baobab.wdjcdn.com/1451897812703c.mp4","playInfo":[{"height":480,"width":848,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1451898114830_4468_848x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1451897812703c.mp4"}],"consumption":{"collectionCount":5246,"shareCount":17206,"playCount":0,"replyCount":162},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/c4e5c0f76d21abbd23c9626af3c9f481_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/c4e5c0f76d21abbd23c9626af3c9f481_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/781e8dee284dab7ac97923091abc2730_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/c4e5c0f76d21abbd23c9626af3c9f481_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4468","forWeibo":"http://wandou.im/14locg"},"campaign":null}},{"type":"video","data":{"id":5150,"date":1456632000000,"idx":2,"title":"周末号外丨风影魔都","description":"一年的拍摄、一个月的后期、一天的剪辑。作者用这部摄影短片「风影魔都」,纪录了他所生活的这座城市\u2014\u2014上海的光影变化。From @JESSE-ZMY","category":"旅行","duration":197,"playUrl":"http://baobab.wdjcdn.com/14538916434374.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453891909312_5150_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14538916434374.mp4"}],"consumption":{"collectionCount":911,"shareCount":1791,"playCount":0,"replyCount":54},"promotion":null,"waterMarks":null,"provider":{"name":"土豆","alias":"tudou","icon":"http://img.wdjimg.com/mms/icon/v1/0/d3/afafc777c31aa95bddbb2d7d8bd90d30_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/56e69eef2117658c7ecead23fe467512_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/56e69eef2117658c7ecead23fe467512_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/4cb9b5efee38e032efad00671ddd3eff_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/56e69eef2117658c7ecead23fe467512_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5150","forWeibo":"http://wandou.im/1bogvg"},"campaign":null}},{"type":"video","data":{"id":4768,"date":1456416000000,"idx":4,"title":"Stop. Look. Go. 享受当下,拥抱自然","description":"每天被各种各样的事物围绕,工作、生活就像一张巨大的网将现代都市人罩住。什么时候,我们才能再次放下繁琐,好好地去拥抱自然,感受那些上天馈赠的美景,重拾内心的平静与幸福。from gnarly bay","category":"综合","duration":164,"playUrl":"http://baobab.wdjcdn.com/14564591224401452488_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456459176645_4768_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14564591224401452488_x264.mp4"}],"consumption":{"collectionCount":1127,"shareCount":1517,"playCount":0,"replyCount":37},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/20fa2f6c9ca9036c1575b06619b59826_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/20fa2f6c9ca9036c1575b06619b59826_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/91a845a29e69a3758907c0b1e94cad2b_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/20fa2f6c9ca9036c1575b06619b59826_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4768","forWeibo":"http://wandou.im/17afv3"},"campaign":null}},{"type":"video","data":{"id":5348,"date":1456588800000,"idx":2,"title":"The One 原来这就是你说的真爱\u2026\u2026","description":"难以忘记第一次见到她时,那种惊为天人的感觉。从此之后,她的举手投足、一颦一笑都在心中,再也无法抹去,男主角对着镜头深情款款地回忆着心中的真爱。只是有时候话虽然说得很动听,但\u2026\u2026From W.A. Studio","category":"剧情","duration":232,"playUrl":"http://baobab.wdjcdn.com/1455614108256t(2).mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455614463683_5348_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455614108256t(2).mp4"}],"consumption":{"collectionCount":826,"shareCount":1232,"playCount":0,"replyCount":85},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/c1c7dbec5f0b6ca408cb176b04bf5096_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/c1c7dbec5f0b6ca408cb176b04bf5096_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/c2d21d1b40f0e1fbef5cf747b240ca73_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/c1c7dbec5f0b6ca408cb176b04bf5096_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5348","forWeibo":"http://wandou.im/1h6lbl"},"campaign":null}},{"type":"video","data":{"id":5370,"date":1456545600000,"idx":5,"title":"周末号外丨虐心奥斯卡提名动画","description":"俄罗斯导演 Konstantin Bronzit 的作品「We Can't Live without Cosmos」(没有宇宙我们无法生存)获得了奥斯卡最佳动画短片提名,讲述了一对好基友相约太空的虐心故事。From MIFF","category":"动画","duration":919,"playUrl":"http://baobab.wdjcdn.com/1455695531248a.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455696465581_5370_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455695531248a.mp4"}],"consumption":{"collectionCount":1374,"shareCount":1318,"playCount":0,"replyCount":32},"promotion":null,"waterMarks":null,"provider":{"name":"腾讯","alias":"qq","icon":"http://img.wdjimg.com/mms/icon/v1/4/2c/def8a8aa0971f93973280f7f75c772c4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/109e172aa2058919317236527d58c1d6_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/109e172aa2058919317236527d58c1d6_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/29412602c2dfac93c7845f0ee9d0709f_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/109e172aa2058919317236527d58c1d6_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5370","forWeibo":"http://wandou.im/1hh61t"},"campaign":null}},{"type":"video","data":{"id":4490,"date":1456027200000,"idx":2,"title":"周末号外丨日本的洗手间到底多厉害","description":"关于日本家居设计,水平是毋庸置疑的。连一个小小的厕所也能创造出不一样的乾坤,一个厕所到底能有多厉害呢?这位日本萌娃就给大家展示了一下,她家的厕所到底是怎样的~ From Life Where I'm From","category":"综合","duration":242,"playUrl":"http://baobab.wdjcdn.com/1455956939710japanwc_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455958910410_4490_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455956939710japanwc_x264.mp4"}],"consumption":{"collectionCount":3215,"shareCount":5904,"playCount":258,"replyCount":127},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/11fd436110d9a2c06965510ca93caf87_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/11fd436110d9a2c06965510ca93caf87_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/c1a4a165ae8a1561842cb7269f1d3f57_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/11fd436110d9a2c06965510ca93caf87_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4490","forWeibo":"http://wandou.im/15fecs"},"campaign":null}},{"type":"video","data":{"id":5740,"date":1456632000000,"idx":1,"title":"周末号外丨流动的「梵高传」","description":"「Loving Vincent」是来自奥斯卡获奖动画团队的一部油画动画电影,电影以梵高的画风、每秒 12 张油画的超大工作量,讲述了我们挚爱的梵高先生的一生。From BreakThruPoland","category":"预告","duration":60,"playUrl":"http://baobab.wdjcdn.com/1456576526831clip2.mp4","playInfo":[{"height":468,"width":640,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456576526831clip2.mp4"}],"consumption":{"collectionCount":1212,"shareCount":1799,"playCount":0,"replyCount":30},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/bd549e2fbad379afd1c330ef9be3bca5_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/bd549e2fbad379afd1c330ef9be3bca5_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/b053b2334c1dff6a7986ce0a781c819f_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/bd549e2fbad379afd1c330ef9be3bca5_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5740","forWeibo":"http://wandou.im/1klrgk"},"campaign":null}},{"type":"video","data":{"id":5292,"date":1456675200000,"idx":5,"title":"一碗用耐心烹饪的家常意面","description":"肉酱、西芹、胡萝卜、番茄,用三十分钟耐心地焖煮,便可熬制成美味的意面酱料,再用 15 分钟将意面煮熟到口感筋道。虽然花费的时间不少,但成品却也因为这耐心而更添美味。From 许四爷(微信 ilovetd_254784245)","category":"开胃","duration":178,"playUrl":"http://baobab.wdjcdn.com/1454571030247w.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1454571798153_5292_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1454571030247w.mp4"}],"consumption":{"collectionCount":1541,"shareCount":1461,"playCount":0,"replyCount":43},"promotion":null,"waterMarks":null,"provider":{"name":"优酷","alias":"youku","icon":"http://img.wdjimg.com/mms/icon/v1/3/2d/dc14dd1e40b8e561eae91584432262d3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/19f9bc2630d643ce6be56a01895e7a40_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/19f9bc2630d643ce6be56a01895e7a40_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/f2fcb626c2f9944882c290da10cd003d_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/19f9bc2630d643ce6be56a01895e7a40_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5292","forWeibo":"http://wandou.im/1dsxaq"},"campaign":null}},{"type":"video","data":{"id":5724,"date":1456502400000,"idx":3,"title":"抖森新片「摩天楼」中文预告","description":"抖森新片电影「High-Rise」(摩天楼)改编自 J·G·巴拉德撰写的 1975 年的同名小说。一栋与世隔绝的摩天大楼,其中的用户自成阶级。表面看似和谐,背地里却逐渐崩坏。From 觸電網","category":"预告","duration":141,"playUrl":"http://baobab.wdjcdn.com/1456480115661mtl.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456480353551_5724_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456480115661mtl.mp4"}],"consumption":{"collectionCount":914,"shareCount":1404,"playCount":0,"replyCount":38},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/b024d2a14d4f140e055a4ad77cc065c7_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/b024d2a14d4f140e055a4ad77cc065c7_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/af033172f176600fb67e0fbab77192a3_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/b024d2a14d4f140e055a4ad77cc065c7_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5724","forWeibo":"http://wandou.im/1k9jhc"},"campaign":null}},{"type":"video","data":{"id":4954,"date":1456027200000,"idx":1,"title":"周末号外丨这是中国 THIS IS CHINA","description":"毕业前,一个人,用时一年,背包行走中国。33个省、70座城市、283个景点,全程55285公里,12万张照片,只为这部片子可以带你纵览华夏之美, 这是作者镜头中的中国。From @小个子爱旅行","category":"旅行","duration":226,"playUrl":"http://baobab.wdjcdn.com/14532883445784.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453288813645_4954_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14532883445784.mp4"}],"consumption":{"collectionCount":2381,"shareCount":5158,"playCount":0,"replyCount":126},"promotion":null,"waterMarks":null,"provider":{"name":"优酷","alias":"youku","icon":"http://img.wdjimg.com/mms/icon/v1/3/2d/dc14dd1e40b8e561eae91584432262d3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/8227f49fcfb0458b46aa250d2bc39ebf_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/8227f49fcfb0458b46aa250d2bc39ebf_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/42340bfbe97a8323a7ba26233dd4b333_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/8227f49fcfb0458b46aa250d2bc39ebf_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4954","forWeibo":"http://wandou.im/19s2g7"},"campaign":null}},{"type":"video","data":{"id":5366,"date":1456502400000,"idx":4,"title":"空中特技飞行队渔夫塔超燃炫技","description":"Red Bull Air Force(红牛空中特技飞行队)集合了世界上最有经验的各类飞行专家,这一次他们聚集在世界上最危险的山区美国犹他州的 Fisher Towers(渔夫塔),展示最精湛的高空技能。From The Roster","category":"运动","duration":373,"playUrl":"http://baobab.wdjcdn.com/1455692839763469122665.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1455693177361_5366_854x480.mp4"},{"height":400,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1455692839763469122665.mp4"}],"consumption":{"collectionCount":745,"shareCount":1244,"playCount":0,"replyCount":34},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/01efc58de27b05310551bf049b906df6_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/01efc58de27b05310551bf049b906df6_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/bad768bdc5b164873d1dc0c35ee86ab0_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/01efc58de27b05310551bf049b906df6_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5366","forWeibo":"http://wandou.im/1hgomj"},"campaign":null}},{"type":"video","data":{"id":4996,"date":1456761600000,"idx":3,"title":"莱利的初次约会","description":"众望所归「头脑特工队」获得了第 88 届奥斯卡最佳动画长片,莱利逐渐适应了新环境后,生活也重新变得多姿多彩了~这支番外篇「莱利的初次约会」里,莱利的新朋友也到家做客了~ From Disney","category":"动画","duration":280,"playUrl":"http://baobab.wdjcdn.com/14533808675980.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453381731324_4996_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14533808675980.mp4"}],"consumption":{"collectionCount":717,"shareCount":1289,"playCount":0,"replyCount":42},"promotion":null,"waterMarks":null,"provider":{"name":"哔哩哔哩动画","alias":"bilibili","icon":"http://img.wdjimg.com/mms/icon/v1/4/cd/b968890a2b3e9ab5ae234175681f8cd4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/81c03ce58a0fd567d9c8f3f8356c89c7_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/81c03ce58a0fd567d9c8f3f8356c89c7_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/fe7c05e1eb825c22f0c3f86d00a59c03_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/81c03ce58a0fd567d9c8f3f8356c89c7_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4996","forWeibo":"http://wandou.im/1a2lw7"},"campaign":null}},{"type":"video","data":{"id":5736,"date":1456545600000,"idx":1,"title":"周末号外丨口袋妖怪出中文版了!","description":"各位小学机友们,在我们快不玩主机的时候,20 周年的「口袋妖怪」却出新了,还有中文简体版!有机友形容此刻的心情是:感觉跟中国申奥成功似的......From The Official Pokémon Channel","category":"广告","duration":130,"playUrl":"http://baobab.wdjcdn.com/1456504775813P.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456505071686_5736_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456504775813P.mp4"}],"consumption":{"collectionCount":556,"shareCount":1207,"playCount":0,"replyCount":60},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/c51d166555192c9ba9b0c44117995445_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/c51d166555192c9ba9b0c44117995445_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/b662485e696f96a6b3c16ebf5b214c4e_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/c51d166555192c9ba9b0c44117995445_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5736","forWeibo":"http://wandou.im/1kdskd"},"campaign":null}},{"type":"video","data":{"id":4794,"date":1456329600000,"idx":3,"title":"重口慎点:收尸二人组","description":"虽然题材有点惊悚,但 MV 其实并不是惊悚路线的啦!作为收尸二人组的两位大叔,每天面对这座城市里莫名死亡的人。大概他们只想说,现在的人啊,就不能小心一点珍爱生命嘛!From Ленинград | Leningrad","category":"音乐","duration":193,"playUrl":"http://baobab.wdjcdn.com/14525705791193.mp4","playInfo":[{"height":480,"width":848,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1452570939148_4794_848x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14525705791193.mp4"}],"consumption":{"collectionCount":898,"shareCount":1475,"playCount":0,"replyCount":45},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/e02305b1e1f58b317ce9011d2480ee0a_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/e02305b1e1f58b317ce9011d2480ee0a_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/6db0efb2714d93159251011e129a75e2_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/e02305b1e1f58b317ce9011d2480ee0a_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=4794","forWeibo":"http://wandou.im/17iet0"},"campaign":null}},{"type":"video","data":{"id":5580,"date":1456588800000,"idx":3,"title":"童年的回忆:油墩子","description":"油墩子,老底子的滋味,现在却成了稀罕物。在许多人的记忆里,放学路上、早饭摊头,街头巷尾总少不了那躺在滋滋的油锅声里的油墩子。短片将教大家如何在家自制这记忆的味道,油墩子。From @日食记","category":"开胃","duration":166,"playUrl":"http://baobab.wdjcdn.com/1456131361532y.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456131575652_5580_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456131361532y.mp4"}],"consumption":{"collectionCount":735,"shareCount":1123,"playCount":0,"replyCount":55},"promotion":null,"waterMarks":null,"provider":{"name":"腾讯","alias":"qq","icon":"http://img.wdjimg.com/mms/icon/v1/4/2c/def8a8aa0971f93973280f7f75c772c4_256_256.png"},"author":{"id":22,"name":"日食记","link":"http://weibo.com/rishiji?from=myfollow_all"},"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/a524ee567ab991bdbce2f5a4f74ca816_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/a524ee567ab991bdbce2f5a4f74ca816_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/de45ea1568ac8dd5cb76db74b67c957e_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/a524ee567ab991bdbce2f5a4f74ca816_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5580","forWeibo":"http://wandou.im/1j0vf4"},"campaign":null}},{"type":"video","data":{"id":3986,"date":1456848000000,"idx":2,"title":"日本人文之旅 A Dream In Japan","description":"从 2012 年到 2015 年间,作者去了日本 6 次,这支充满人文气息的旅行短片由这 6 次旅行的素材剪辑而成。东京、京都、大阪、北海道,每一个地方都拥有自己独特的美景和人文特质。From Fincher Wei","category":"旅行","duration":246,"playUrl":"http://baobab.wdjcdn.com/1451892098914459941116.mp4","playInfo":[{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1451892098914459941116.mp4"}],"consumption":{"collectionCount":1033,"shareCount":1485,"playCount":0,"replyCount":41},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/f9936f6c170c9843731f7b15a8e34c51_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/f9936f6c170c9843731f7b15a8e34c51_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/bfbd703b44bcef8c667c32123ac67f0b_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/f9936f6c170c9843731f7b15a8e34c51_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=3986","forWeibo":"http://wandou.im/114ntb"},"campaign":null}},{"type":"video","data":{"id":5738,"date":1456761600000,"idx":4,"title":"谷歌眼镜背后女性的一天","description":"3 月 1 日「中华人民共和国反家庭暴力法」将正式施行。这支以女性佩戴谷歌眼镜为视角的短片,揭露了一个残酷的事实,时至今日女性仍然遭受着暴力的伤害。From @柚子木字幕组","category":"广告","duration":146,"playUrl":"http://baobab.wdjcdn.com/14565674319820264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456567504060_5738_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/14565674319820264.mp4"}],"consumption":{"collectionCount":505,"shareCount":1194,"playCount":0,"replyCount":133},"promotion":null,"waterMarks":null,"provider":{"name":"哔哩哔哩动画","alias":"bilibili","icon":"http://img.wdjimg.com/mms/icon/v1/4/cd/b968890a2b3e9ab5ae234175681f8cd4_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/d12e0dc34fda288acb58de7a3c2719af_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/d12e0dc34fda288acb58de7a3c2719af_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/213971e9112da04a65bdfcece1ca0b5b_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/d12e0dc34fda288acb58de7a3c2719af_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5738","forWeibo":"http://wandou.im/1kkg72"},"campaign":null}},{"type":"video","data":{"id":5010,"date":1456588800000,"idx":5,"title":"日本剑玉花样玩法","description":"Kendama 日本剑玉,又称剑球、托球,是一种来自日本的传统民间游戏,起源于约17~19世纪于法国,后来逐渐发展为了有体系的竞技项目。看看短片中的年轻人把剑玉玩出了怎样高观赏性的花样吧~From Kuma Films","category":"运动","duration":300,"playUrl":"http://baobab.wdjcdn.com/1453446864755Wo.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1453447206083_5010_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1453446864755Wo.mp4"}],"consumption":{"collectionCount":609,"shareCount":823,"playCount":0,"replyCount":48},"promotion":null,"waterMarks":null,"provider":{"name":"YouTube","alias":"youtube","icon":"http://img.wdjimg.com/image/video/fa20228bc5b921e837156923a58713f6_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/824e932944da65c8ef4afcb662027ec7_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/824e932944da65c8ef4afcb662027ec7_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/d2131a08532dcda7c541212d0426ef78_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/824e932944da65c8ef4afcb662027ec7_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5010","forWeibo":"http://wandou.im/1a9kmm"},"campaign":null}}] - * count : 30 - * total : 0 - * nextPageUrl : null - */ - - private int count; - private int total; - private Object nextPageUrl; - /** - * type : video - * data : {"id":5630,"date":1456416000000,"idx":1,"title":"我为什么要健身?","description":"我为什么要健身?难道真的只是为了减肥吗?短片「如何四步轻松减肥」中,男主角的故事并不只是一个肤浅的减肥励志故事。在健身房里流了一年的汗,不仅是为了外表,也是为了内心。From Benjamin Berman","category":"剧情","duration":423,"playUrl":"http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4","playInfo":[{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456459550061_5630_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4"}],"consumption":{"collectionCount":4983,"shareCount":8792,"playCount":0,"replyCount":119},"promotion":null,"waterMarks":null,"provider":{"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"},"author":null,"adTrack":null,"shareAdTrack":null,"favoriteAdTrack":null,"webAdTrack":null,"cover":{"feed":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/07cbb50d55041eb5e97f5091cac59d64_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg"},"webUrl":{"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5630","forWeibo":"http://wandou.im/1jbvwz"},"campaign":null} - */ - - private List itemList; - - public void setCount(int count) { - this.count = count; - } - - public void setTotal(int total) { - this.total = total; - } - - public void setNextPageUrl(Object nextPageUrl) { - this.nextPageUrl = nextPageUrl; - } - - public void setItemList(List itemList) { - this.itemList = itemList; - } - - public int getCount() { - return count; - } - - public int getTotal() { - return total; - } - - public Object getNextPageUrl() { - return nextPageUrl; - } - - public List getItemList() { - return itemList; - } - - public static class ItemListEntity { - private String type; - /** - * id : 5630 - * date : 1456416000000 - * idx : 1 - * title : 我为什么要健身? - * description : 我为什么要健身?难道真的只是为了减肥吗?短片「如何四步轻松减肥」中,男主角的故事并不只是一个肤浅的减肥励志故事。在健身房里流了一年的汗,不仅是为了外表,也是为了内心。From Benjamin Berman - * category : 剧情 - * duration : 423 - * playUrl : http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4 - * playInfo : [{"height":480,"width":854,"name":"标清","type":"normal","url":"http://baobab.wdjcdn.com/1456459550061_5630_854x480.mp4"},{"height":720,"width":1280,"name":"高清","type":"high","url":"http://baobab.wdjcdn.com/1456459181808howtoloseweight_x264.mp4"}] - * consumption : {"collectionCount":4983,"shareCount":8792,"playCount":0,"replyCount":119} - * promotion : null - * waterMarks : null - * provider : {"name":"Vimeo","alias":"vimeo","icon":"http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png"} - * author : null - * adTrack : null - * shareAdTrack : null - * favoriteAdTrack : null - * webAdTrack : null - * cover : {"feed":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","detail":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg","blurred":"http://img.wdjimg.com/image/video/07cbb50d55041eb5e97f5091cac59d64_0_0.jpeg","sharing":"http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg"} - * webUrl : {"raw":"http://www.wandoujia.com/eyepetizer/detail.html?vid=5630","forWeibo":"http://wandou.im/1jbvwz"} - * campaign : null - */ - - private DataEntity data; - - public void setType(String type) { - this.type = type; - } - - public void setData(DataEntity data) { - this.data = data; - } - - public String getType() { - return type; - } - - public DataEntity getData() { - return data; - } - - public static class DataEntity { - private int id; - private long date; - private int idx; - private String title; - private String description; - private String category; - private int duration; - private String playUrl; - /** - * collectionCount : 4983 - * shareCount : 8792 - * playCount : 0 - * replyCount : 119 - */ - - private ConsumptionEntity consumption; - private Object promotion; - private Object waterMarks; - /** - * name : Vimeo - * alias : vimeo - * icon : http://img.wdjimg.com/image/video/c3ad630be461cbb081649c9e21d6cbe3_256_256.png - */ - - private ProviderEntity provider; - private Object author; - private Object adTrack; - private Object shareAdTrack; - private Object favoriteAdTrack; - private Object webAdTrack; - /** - * feed : http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg - * detail : http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg - * blurred : http://img.wdjimg.com/image/video/07cbb50d55041eb5e97f5091cac59d64_0_0.jpeg - * sharing : http://img.wdjimg.com/image/video/60a772984b6086faa90fa4f6a8a2412e_0_0.jpeg - */ - - private CoverEntity cover; - /** - * raw : http://www.wandoujia.com/eyepetizer/detail.html?vid=5630 - * forWeibo : http://wandou.im/1jbvwz - */ - - private WebUrlEntity webUrl; - private Object campaign; - /** - * height : 480 - * width : 854 - * name : 标清 - * type : normal - * url : http://baobab.wdjcdn.com/1456459550061_5630_854x480.mp4 - */ - - private List playInfo; - - public void setId(int id) { - this.id = id; - } - - public void setDate(long date) { - this.date = date; - } - - public void setIdx(int idx) { - this.idx = idx; - } - - public void setTitle(String title) { - this.title = title; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCategory(String category) { - this.category = category; - } - - public void setDuration(int duration) { - this.duration = duration; - } - - public void setPlayUrl(String playUrl) { - this.playUrl = playUrl; - } - - public void setConsumption(ConsumptionEntity consumption) { - this.consumption = consumption; - } - - public void setPromotion(Object promotion) { - this.promotion = promotion; - } - - public void setWaterMarks(Object waterMarks) { - this.waterMarks = waterMarks; - } - - public void setProvider(ProviderEntity provider) { - this.provider = provider; - } - - public void setAuthor(Object author) { - this.author = author; - } - - public void setAdTrack(Object adTrack) { - this.adTrack = adTrack; - } - - public void setShareAdTrack(Object shareAdTrack) { - this.shareAdTrack = shareAdTrack; - } - - public void setFavoriteAdTrack(Object favoriteAdTrack) { - this.favoriteAdTrack = favoriteAdTrack; - } - - public void setWebAdTrack(Object webAdTrack) { - this.webAdTrack = webAdTrack; - } - - public void setCover(CoverEntity cover) { - this.cover = cover; - } - - public void setWebUrl(WebUrlEntity webUrl) { - this.webUrl = webUrl; - } - - public void setCampaign(Object campaign) { - this.campaign = campaign; - } - - public void setPlayInfo(List playInfo) { - this.playInfo = playInfo; - } - - public int getId() { - return id; - } - - public long getDate() { - return date; - } - - public int getIdx() { - return idx; - } - - public String getTitle() { - return title; - } - - public String getDescription() { - return description; - } - - public String getCategory() { - return category; - } - - public int getDuration() { - return duration; - } - - public String getPlayUrl() { - return playUrl; - } - - public ConsumptionEntity getConsumption() { - return consumption; - } - - public Object getPromotion() { - return promotion; - } - - public Object getWaterMarks() { - return waterMarks; - } - - public ProviderEntity getProvider() { - return provider; - } - - public Object getAuthor() { - return author; - } - - public Object getAdTrack() { - return adTrack; - } - - public Object getShareAdTrack() { - return shareAdTrack; - } - - public Object getFavoriteAdTrack() { - return favoriteAdTrack; - } - - public Object getWebAdTrack() { - return webAdTrack; - } - - public CoverEntity getCover() { - return cover; - } - - public WebUrlEntity getWebUrl() { - return webUrl; - } - - public Object getCampaign() { - return campaign; - } - - public List getPlayInfo() { - return playInfo; - } - - public static class ConsumptionEntity { - private int collectionCount; - private int shareCount; - private int playCount; - private int replyCount; - - public void setCollectionCount(int collectionCount) { - this.collectionCount = collectionCount; - } - - public void setShareCount(int shareCount) { - this.shareCount = shareCount; - } - - public void setPlayCount(int playCount) { - this.playCount = playCount; - } - - public void setReplyCount(int replyCount) { - this.replyCount = replyCount; - } - - public int getCollectionCount() { - return collectionCount; - } - - public int getShareCount() { - return shareCount; - } - - public int getPlayCount() { - return playCount; - } - - public int getReplyCount() { - return replyCount; - } - } - - public static class ProviderEntity { - private String name; - private String alias; - private String icon; - - public void setName(String name) { - this.name = name; - } - - public void setAlias(String alias) { - this.alias = alias; - } - - public void setIcon(String icon) { - this.icon = icon; - } - - public String getName() { - return name; - } - - public String getAlias() { - return alias; - } - - public String getIcon() { - return icon; - } - } - - public static class CoverEntity { - private String feed; - private String detail; - private String blurred; - private String sharing; - - public void setFeed(String feed) { - this.feed = feed; - } - - public void setDetail(String detail) { - this.detail = detail; - } - - public void setBlurred(String blurred) { - this.blurred = blurred; - } - - public void setSharing(String sharing) { - this.sharing = sharing; - } - - public String getFeed() { - return feed; - } - - public String getDetail() { - return detail; - } - - public String getBlurred() { - return blurred; - } - - public String getSharing() { - return sharing; - } - } - - public static class WebUrlEntity { - private String raw; - private String forWeibo; - - public void setRaw(String raw) { - this.raw = raw; - } - - public void setForWeibo(String forWeibo) { - this.forWeibo = forWeibo; - } - - public String getRaw() { - return raw; - } - - public String getForWeibo() { - return forWeibo; - } - } - - public static class PlayInfoEntity { - private int height; - private int width; - private String name; - private String type; - private String url; - - public void setHeight(int height) { - this.height = height; - } - - public void setWidth(int width) { - this.width = width; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setUrl(String url) { - this.url = url; - } - - public int getHeight() { - return height; - } - - public int getWidth() { - return width; - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } - - public String getUrl() { - return url; - } - } - } - } -} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/User.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/User.java new file mode 100644 index 0000000000000000000000000000000000000000..36275f00e03fcd6d837267785abb11d75bde0115 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/model/entity/User.java @@ -0,0 +1,32 @@ +package me.jessyan.mvparms.demo.mvp.model.entity; + + +public class User { + private final int id; + private final String login; + private final String avatar_url; + + public User(int id, String login, String avatar_url) { + this.id = id; + this.login = login; + this.avatar_url = avatar_url; + } + + public String getAvatarUrl() { + if (avatar_url.isEmpty()) return avatar_url; + return avatar_url.split("\\?")[0]; + } + + + public int getId() { + return id; + } + + public String getLogin() { + return login; + } + + @Override public String toString() { + return "id -> " + id + " login -> " + login; + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java new file mode 100644 index 0000000000000000000000000000000000000000..d71fc57c416bac4f8c503e3f728f1ab39eaeeb53 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java @@ -0,0 +1,79 @@ +package me.jessyan.mvparms.demo.mvp.presenter; + +import com.jess.arms.base.BaseActivity; +import com.jess.arms.base.DefaultAdapter; +import com.jess.arms.di.scope.ActivityScope; +import com.jess.arms.mvp.BasePresenter; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import me.jessyan.mvparms.demo.mvp.contract.UserContract; +import me.jessyan.mvparms.demo.mvp.model.entity.User; +import me.jessyan.mvparms.demo.mvp.ui.adapter.UserAdapter; +import me.jessyan.rxerrorhandler.core.RxErrorHandler; +import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action0; +import rx.schedulers.Schedulers; + +/** + * Created by jess on 9/4/16 10:59 + * Contact with jess.yan.effort@gmail.com + */ +@ActivityScope +public class UserPresenter extends BasePresenter { + private RxErrorHandler mErrorHandler; + private List mUsers = new ArrayList<>(); + private DefaultAdapter mAdapter; + private int lastUserId = 1; + + + @Inject + public UserPresenter(UserContract.Model model, UserContract.View rootView, RxErrorHandler handler) { + super(model, rootView); + this.mErrorHandler = handler; + mAdapter = new UserAdapter(mUsers); + mRootView.setAdapter(mAdapter);//设置Adapter + } + + public void requestUsers(final boolean pullToRefresh) { + if (pullToRefresh) lastUserId = 1; + + mModel.getUsers(lastUserId, pullToRefresh) + .subscribeOn(Schedulers.io()) + .doOnSubscribe(new Action0() { + @Override + public void call() { + if (pullToRefresh) + mRootView.showLoading();//显示上拉刷新的进度条 + else + mRootView.startLoadMore(); + } + }).subscribeOn(AndroidSchedulers.mainThread()) + .observeOn(AndroidSchedulers.mainThread()) + .doAfterTerminate(new Action0() { + @Override + public void call() { + if (pullToRefresh) + mRootView.hideLoading();//隐藏上拉刷新的进度条 + else + mRootView.endLoadMore(); + } + }) + .compose(((BaseActivity)mRootView).>bindToLifecycle())//使用RXlifecycle,使subscription和activity一起销毁 + .subscribe(new ErrorHandleSubscriber>(mErrorHandler) { + @Override + public void onNext(List users) { + lastUserId = users.get(users.size() - 1).getId();//记录最后一个id,用于下一次请求 + if (pullToRefresh) mUsers.clear();//如果是上拉刷新则晴空列表 + for (User user : users) { + mUsers.add(user); + } + mAdapter.notifyDataSetChanged();//通知更新数据 + } + }); + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/MainActivity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/MainActivity.java deleted file mode 100644 index 1eb25c1ffd020c03244e6760029dc9f2d42d9057..0000000000000000000000000000000000000000 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/MainActivity.java +++ /dev/null @@ -1,59 +0,0 @@ -package me.jessyan.mvparms.demo.mvp.ui.activity; - -import android.view.LayoutInflater; -import android.view.View; - -import com.jess.arms.utils.UiUtils; - -import io.rx_cache.DynamicKey; -import io.rx_cache.EvictDynamicKey; -import io.rx_cache.Reply; -import me.jessyan.mvparms.demo.R; -import me.jessyan.mvparms.demo.di.component.AppComponent; -import me.jessyan.mvparms.demo.mvp.model.entity.HomePicEntity; -import me.jessyan.mvparms.demo.mvp.ui.common.WEActivity; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Action1; -import rx.schedulers.Schedulers; -import timber.log.Timber; - - -public class MainActivity extends WEActivity { - - @Override - protected void setupActivityComponent(AppComponent appComponent) { - appComponent - .cacheManager() - .getCommonCache() - .getDailyList(appComponent - .serviceManager() - .getCommonService() - .getDailyList(),new DynamicKey("15"),new EvictDynamicKey(true)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .compose(this.>bindToLifecycle()) - .subscribe(new Action1>() { - @Override - public void call(Reply homePicEntityReply) { - UiUtils.makeText(homePicEntityReply.getData().getIssueList().get(0).getPublishTime()+"/"+homePicEntityReply.getSource().name()); - Timber.tag(TAG).w(homePicEntityReply.getData().getIssueList().get(0).getPublishTime()+""); - } - }, new Action1() { - @Override - public void call(Throwable throwable) { - throwable.printStackTrace(); - } - }); - - } - - @Override - protected View initView() { - return LayoutInflater.from(this).inflate(R.layout.activity_main,null,false); - } - - @Override - protected void initData() { - - } -} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..e68855d46900f508a97957b8d55444a82fc65539 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java @@ -0,0 +1,179 @@ +package me.jessyan.mvparms.demo.mvp.ui.activity; + +import android.content.Intent; +import android.support.annotation.Nullable; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; + +import com.jess.arms.base.DefaultAdapter; +import com.jess.arms.utils.UiUtils; +import com.paginate.Paginate; + +import butterknife.Bind; +import me.jessyan.mvparms.demo.R; +import me.jessyan.mvparms.demo.di.component.AppComponent; +import me.jessyan.mvparms.demo.di.component.DaggerUserComponent; +import me.jessyan.mvparms.demo.di.module.UserModule; +import me.jessyan.mvparms.demo.mvp.contract.UserContract; +import me.jessyan.mvparms.demo.mvp.presenter.UserPresenter; +import me.jessyan.mvparms.demo.mvp.ui.common.WEActivity; +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import timber.log.Timber; + + +public class UserActivity extends WEActivity implements UserContract.View, SwipeRefreshLayout.OnRefreshListener { + + @Nullable + @Bind(R.id.recyclerView) + RecyclerView mRecyclerView; + @Nullable + @Bind(R.id.SwipeRefreshLayout) + SwipeRefreshLayout mSwipeRefreshLayout; + + private Paginate mPaginate; + private boolean isLoadingMore; + + + @Override + protected void setupActivityComponent(AppComponent appComponent) { + DaggerUserComponent + .builder() + .appComponent(appComponent) + .userModule(new UserModule(this)) + .build() + .inject(this); + + } + + @Override + protected View initView() { + return LayoutInflater.from(this).inflate(R.layout.activity_user, null, false); + } + + @Override + protected void initData() { + mPresenter.requestUsers(true);//打开app时自动加载列表 + } + + @Override + public void onRefresh() { + mPresenter.requestUsers(true); + } + + /** + * 初始化RecycleView + */ + private void initRecycleView() { + mSwipeRefreshLayout.setOnRefreshListener(this); + configRecycleView(mRecyclerView, new GridLayoutManager(this, 2)); + } + + + /** + * 配置recycleview + * + * @param recyclerView + * @param layoutManager + */ + private void configRecycleView(RecyclerView recyclerView + , RecyclerView.LayoutManager layoutManager + ) { + recyclerView.setLayoutManager(layoutManager); + //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 + recyclerView.setHasFixedSize(true); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + } + + + @Override + public void showLoading() { + Timber.tag(TAG).w("showLoading"); + Observable.just(1) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1() { + @Override + public void call(Integer integer) { + mSwipeRefreshLayout.setRefreshing(true); + } + }); + } + + @Override + public void hideLoading() { + Timber.tag(TAG).w("hideLoading"); + mSwipeRefreshLayout.setRefreshing(false); + } + + @Override + public void showMessage(String message) { + UiUtils.SnackbarText(message); + } + + @Override + public void launchActivity(Intent intent) { + + } + + @Override + public void killMyself() { + + } + + @Override + public void setAdapter(DefaultAdapter adapter) { + mRecyclerView.setAdapter(adapter); + initRecycleView(); + initPaginate(); + } + + /** + * 开始加载更多 + */ + @Override + public void startLoadMore() { + isLoadingMore = true; + } + + /** + * 介绍加载更多 + */ + @Override + public void endLoadMore() { + isLoadingMore = false; + } + + /** + * 初始化Paginate,用于加载更多 + */ + private void initPaginate() { + if (mPaginate == null) { + Paginate.Callbacks callbacks = new Paginate.Callbacks() { + @Override + public void onLoadMore() { + mPresenter.requestUsers(false); + } + + @Override + public boolean isLoading() { + return isLoadingMore; + } + + @Override + public boolean hasLoadedAllItems() { + return false; + } + }; + + mPaginate = Paginate.with(mRecyclerView, callbacks) + .setLoadingTriggerThreshold(0) + .build(); + mPaginate.setHasMoreDataToLoad(false); + } + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..453f1d7cf37b33d08da5372358a528c2397251df --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java @@ -0,0 +1,32 @@ +package me.jessyan.mvparms.demo.mvp.ui.adapter; + +import android.view.View; + +import com.jess.arms.base.BaseHolder; +import com.jess.arms.base.DefaultAdapter; + +import java.util.List; + +import me.jessyan.mvparms.demo.R; +import me.jessyan.mvparms.demo.mvp.model.entity.User; +import me.jessyan.mvparms.demo.mvp.ui.holder.UserItemHolder; + +/** + * Created by jess on 9/4/16 12:57 + * Contact with jess.yan.effort@gmail.com + */ +public class UserAdapter extends DefaultAdapter { + public UserAdapter(List infos) { + super(infos); + } + + @Override + public BaseHolder getHolder(View v) { + return new UserItemHolder(v); + } + + @Override + public int getLayoutId() { + return R.layout.recycle_list; + } +} diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..749fb9e95aace57ed53267b0a1f1dfd7ac31b1e5 --- /dev/null +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java @@ -0,0 +1,51 @@ +package me.jessyan.mvparms.demo.mvp.ui.holder; + +import android.support.annotation.Nullable; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.jakewharton.rxbinding.widget.RxTextView; +import com.jess.arms.base.BaseHolder; +import com.jess.arms.widget.imageloader.ImageLoader; +import com.jess.arms.widget.imageloader.glide.GlideImageConfig; + +import butterknife.Bind; +import me.jessyan.mvparms.demo.R; +import me.jessyan.mvparms.demo.app.WEApplication; +import me.jessyan.mvparms.demo.mvp.model.entity.User; +import rx.Observable; + +/** + * Created by jess on 9/4/16 12:56 + * Contact with jess.yan.effort@gmail.com + */ +public class UserItemHolder extends BaseHolder { + + @Nullable + @Bind(R.id.iv_avatar) + ImageView mAvater; + @Nullable + @Bind(R.id.tv_name) + TextView mName; + private ImageLoader mImageLoader;//用于加载图片的管理类,默认使用glide,使用策略模式,可替换框架 + private final WEApplication mApplication; + + public UserItemHolder(View itemView) { + super(itemView); + mApplication = (WEApplication) itemView.getContext().getApplicationContext(); + mImageLoader = mApplication.getAppComponent().imageLoader(); + } + + @Override + public void setData(User data) { + Observable.just(data.getLogin()) + .subscribe(RxTextView.text(mName)); + + mImageLoader.loadImage(mApplication, GlideImageConfig + .builder() + .url(data.getAvatarUrl()) + .imagerView(mAvater) + .build()); + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 052d9cbf074d949cf253d7784c5579b076d8e08b..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6e0258ae9f19e43a67e606fbdf39aa3f507e239 --- /dev/null +++ b/app/src/main/res/layout/activity_user.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/layout/recycle_list.xml b/app/src/main/res/layout/recycle_list.xml new file mode 100644 index 0000000000000000000000000000000000000000..27dbccccfb9263d3298e9786288b89c5e739183b --- /dev/null +++ b/app/src/main/res/layout/recycle_list.xml @@ -0,0 +1,28 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3ab3e9cbce07f7cdc941fc8ba424c05e83ed80f0..d3bb5fd1099871cf8cec27f1093564e142e8a1d2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,5 @@ #3F51B5 #303F9F #FF4081 + #FFFFFF diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5885930df6d10edf3d6df40d6556297d11f953da..0eb88fe3350eaa944c0c6fe7e949e1cab494e8e8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ -