extends RecyclerView.ViewHolder implements V
public BaseHolder(View itemView) {
super(itemView);
- itemView.setOnClickListener(this);//点击事件
- if (ThirdViewUtil.isUseAutolayout()) AutoUtils.autoSize(itemView);//适配
- ThirdViewUtil.bindTarget(this, itemView);//绑定
+ //点击事件
+ itemView.setOnClickListener(this);
+ //屏幕适配
+ if (ThirdViewUtil.isUseAutolayout()) AutoUtils.autoSize(itemView);
+ //绑定 ButterKnife
+ ThirdViewUtil.bindTarget(this, itemView);
}
-
/**
* 设置数据
*
- * @param data
- * @param position
+ * @param data 数据
+ * @param position 在 RecyclerView 中的位置
*/
- public abstract void setData(T data, int position);
-
+ public abstract void setData(@NonNull T data, int position);
/**
* 在 Activity 的 onDestroy 中使用 {@link DefaultAdapter#releaseAllHolder(RecyclerView)} 方法 (super.onDestroy() 之前)
@@ -66,11 +68,21 @@ public void onClick(View view) {
}
}
+ /**
+ * item 点击事件
+ */
public interface OnViewClickListener {
+
+ /**
+ * item 被点击
+ *
+ * @param view 被点击的 {@link View}
+ * @param position 在 RecyclerView 中的位置
+ */
void onViewClick(View view, int position);
}
public void setOnItemClickListener(OnViewClickListener listener) {
this.mOnViewClickListener = listener;
}
-}
+}
\ No newline at end of file
diff --git a/arms/src/main/java/com/jess/arms/base/BaseLazyLoadFragment.java b/arms/src/main/java/com/jess/arms/base/BaseLazyLoadFragment.java
new file mode 100644
index 000000000..440a6e642
--- /dev/null
+++ b/arms/src/main/java/com/jess/arms/base/BaseLazyLoadFragment.java
@@ -0,0 +1,73 @@
+package com.jess.arms.base;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+
+import com.jess.arms.mvp.IPresenter;
+
+import java.util.List;
+
+/**
+ * 子类覆写{@link BaseLazyLoadFragment}lazyLoadData可快速实现Fragment懒加载
+ */
+public abstract class BaseLazyLoadFragment extends BaseFragment
{
+
+ private boolean isViewCreated; // 界面是否已创建完成
+ private boolean isVisibleToUser; // 是否对用户可见
+ private boolean isDataLoaded; // 数据是否已请求
+
+ /**
+ * 第一次可见时触发调用,此处实现具体的数据请求逻辑
+ */
+ protected abstract void lazyLoadData();
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ this.isVisibleToUser = isVisibleToUser;
+ tryLoadData();
+ }
+
+ /**
+ * 保证在initData后触发
+ */
+ @Override
+ public void onResume() {
+ super.onResume();
+ isViewCreated = true;
+ tryLoadData();
+ }
+
+ /**
+ * ViewPager场景下,判断父fragment是否可见
+ */
+ private boolean isParentVisible() {
+ Fragment fragment = getParentFragment();
+ return fragment == null || (fragment instanceof BaseLazyLoadFragment && ((BaseLazyLoadFragment) fragment).isVisibleToUser);
+ }
+
+ /**
+ * ViewPager场景下,当前fragment可见时,如果其子fragment也可见,则让子fragment请求数据
+ */
+ private void dispatchParentVisibleState() {
+ FragmentManager fragmentManager = getChildFragmentManager();
+ List fragments = fragmentManager.getFragments();
+ if (fragments.isEmpty()) {
+ return;
+ }
+ for (Fragment child : fragments) {
+ if (child instanceof BaseLazyLoadFragment && ((BaseLazyLoadFragment) child).isVisibleToUser) {
+ ((BaseLazyLoadFragment) child).tryLoadData();
+ }
+ }
+ }
+
+ public void tryLoadData() {
+ if (isViewCreated && isVisibleToUser && isParentVisible() && !isDataLoaded) {
+ lazyLoadData();
+ isDataLoaded = true;
+ //通知子Fragment请求数据
+ dispatchParentVisibleState();
+ }
+ }
+}
diff --git a/arms/src/main/java/com/jess/arms/base/BaseService.java b/arms/src/main/java/com/jess/arms/base/BaseService.java
index 7f288f531..e18588475 100644
--- a/arms/src/main/java/com/jess/arms/base/BaseService.java
+++ b/arms/src/main/java/com/jess/arms/base/BaseService.java
@@ -68,7 +68,7 @@ public void onDestroy() {
* 确保依赖后, 将此方法返回 true, Arms 会自动检测您依赖的 EventBus, 并自动注册
* 这种做法可以让使用者有自行选择三方库的权利, 并且还可以减轻 Arms 的体积
*
- * @return 返回 {@code true} (默认为使用 {@code true}), Arms 会自动注册 EventBus
+ * @return 返回 {@code true} (默认为 {@code true}), Arms 会自动注册 EventBus
*/
public boolean useEventBus() {
return true;
@@ -78,12 +78,12 @@ protected void addDispose(Disposable disposable) {
if (mCompositeDisposable == null) {
mCompositeDisposable = new CompositeDisposable();
}
- mCompositeDisposable.add(disposable);//将所有subscription放入,集中处理
+ mCompositeDisposable.add(disposable);//将所有 Disposable 放入容器集中处理
}
protected void unDispose() {
if (mCompositeDisposable != null) {
- mCompositeDisposable.clear();//保证activity结束时取消所有正在执行的订阅
+ mCompositeDisposable.clear();//保证 Activity 结束时取消所有正在执行的订阅
}
}
diff --git a/arms/src/main/java/com/jess/arms/base/DefaultAdapter.java b/arms/src/main/java/com/jess/arms/base/DefaultAdapter.java
index 665d5c628..9577d951f 100644
--- a/arms/src/main/java/com/jess/arms/base/DefaultAdapter.java
+++ b/arms/src/main/java/com/jess/arms/base/DefaultAdapter.java
@@ -15,6 +15,7 @@
*/
package com.jess.arms.base;
+import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
@@ -24,7 +25,7 @@
/**
* ================================================
- * 基类 {@link RecyclerView.Adapter} ,如果需要实现非常复杂的 {@link RecyclerView} ,请尽量使用其他优秀的三方库
+ * 基类 {@link RecyclerView.Adapter}, 如果需要实现非常复杂的 {@link RecyclerView}, 请尽量使用其他优秀的三方库
*
* Created by jess on 2015/11/27.
* Contact me
@@ -44,15 +45,16 @@ public DefaultAdapter(List infos) {
/**
* 创建 {@link BaseHolder}
*
- * @param parent
- * @param viewType
- * @return
+ * @param parent 父容器
+ * @param viewType 布局类型
+ * @return {@link BaseHolder}
*/
@Override
public BaseHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(viewType), parent, false);
mHolder = getHolder(view, viewType);
- mHolder.setOnItemClickListener(new BaseHolder.OnViewClickListener() {//设置Item点击事件
+ //设置Item点击事件
+ mHolder.setOnItemClickListener(new BaseHolder.OnViewClickListener() {
@Override
public void onViewClick(View view, int position) {
if (mOnItemClickListener != null && mInfos.size() > 0) {
@@ -66,35 +68,38 @@ public void onViewClick(View view, int position) {
/**
* 绑定数据
*
- * @param holder
- * @param position
+ * @param holder {@link BaseHolder}
+ * @param position 在 RecyclerView 中的位置
*/
@Override
public void onBindViewHolder(BaseHolder holder, int position) {
holder.setData(mInfos.get(position), position);
}
-
/**
- * 返回数据的个数
+ * 返回数据总个数
*
- * @return
+ * @return 数据总个数
*/
@Override
public int getItemCount() {
return mInfos.size();
}
-
+ /**
+ * 返回数据集合
+ *
+ * @return 数据集合
+ */
public List getInfos() {
return mInfos;
}
/**
- * 获得某个 {@code position} 上的 item 的数据
+ * 获得 RecyclerView 中某个 position 上的 item 数据
*
- * @param position
- * @return
+ * @param position 在 RecyclerView 中的位置
+ * @return 数据
*/
public T getItem(int position) {
return mInfos == null ? null : mInfos.get(position);
@@ -103,25 +108,25 @@ public T getItem(int position) {
/**
* 让子类实现用以提供 {@link BaseHolder}
*
- * @param v
- * @param viewType
- * @return
+ * @param v 用于展示的 {@link View}
+ * @param viewType 布局类型
+ * @return {@link BaseHolder}
*/
- public abstract BaseHolder getHolder(View v, int viewType);
+ @NonNull
+ public abstract BaseHolder getHolder(@NonNull View v, int viewType);
/**
- * 提供用于 {@code item} 布局的 {@code layoutId}
+ * 提供用于 item 布局的 {@code layoutId}
*
- * @param viewType
- * @return
+ * @param viewType 布局类型
+ * @return 布局 id
*/
public abstract int getLayoutId(int viewType);
-
/**
- * 遍历所有{@link BaseHolder},释放他们需要释放的资源
+ * 遍历所有 {@link BaseHolder}, 释放他们需要释放的资源
*
- * @param recyclerView
+ * @param recyclerView {@link RecyclerView}
*/
public static void releaseAllHolder(RecyclerView recyclerView) {
if (recyclerView == null) return;
@@ -134,11 +139,26 @@ public static void releaseAllHolder(RecyclerView recyclerView) {
}
}
-
+ /**
+ * item 点击事件
+ * @param
+ */
public interface OnRecyclerViewItemClickListener {
- void onItemClick(View view, int viewType, T data, int position);
+
+ /**
+ * item 被点击
+ * @param view 被点击的 {@link View}
+ * @param viewType 布局类型
+ * @param data 数据
+ * @param position 在 RecyclerView 中的位置
+ */
+ void onItemClick(@NonNull View view, int viewType, @NonNull T data, int position);
}
+ /**
+ * 设置 item 点击事件
+ * @param listener
+ */
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
diff --git a/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java b/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
index dce05c597..8f6acbfa9 100644
--- a/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
+++ b/arms/src/main/java/com/jess/arms/base/delegate/ActivityDelegateImpl.java
@@ -41,7 +41,6 @@ public ActivityDelegateImpl(@NonNull Activity activity) {
this.iActivity = (IActivity) activity;
}
-
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
//如果要使用 EventBus 请将此方法返回 true
diff --git a/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java b/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
index e4e43e93c..1777b9ada 100644
--- a/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
+++ b/arms/src/main/java/com/jess/arms/base/delegate/AppDelegate.java
@@ -135,10 +135,8 @@ public void onCreate(@NonNull Application application) {
for (AppLifecycles lifecycle : mAppLifecycles) {
lifecycle.onCreate(mApplication);
}
-
}
-
@Override
public void onTerminate(@NonNull Application application) {
if (mActivityLifecycle != null) {
@@ -169,7 +167,6 @@ public void onTerminate(@NonNull Application application) {
this.mApplication = null;
}
-
/**
* 将app的全局配置信息封装进module(使用Dagger注入到需要配置信息的地方)
* 需要在AndroidManifest中声明{@link ConfigModule}的实现类,和Glide的配置方式相似
@@ -177,7 +174,6 @@ public void onTerminate(@NonNull Application application) {
* @return GlobalConfigModule
*/
private GlobalConfigModule getGlobalConfigModule(Context context, List modules) {
-
GlobalConfigModule.Builder builder = GlobalConfigModule
.builder();
@@ -189,7 +185,6 @@ private GlobalConfigModule getGlobalConfigModule(Context context, List provideExtras(Cache.Factory cacheFactory) {
@Singleton
@Provides
- static List provideFragmentLifecycles(){
+ static List provideFragmentLifecycles() {
return new ArrayList<>();
}
public interface GsonConfiguration {
- void configGson(Context context, GsonBuilder builder);
+ void configGson(@NonNull Context context, @NonNull GsonBuilder builder);
}
}
diff --git a/arms/src/main/java/com/jess/arms/di/module/ClientModule.java b/arms/src/main/java/com/jess/arms/di/module/ClientModule.java
index e6c304747..420f3b3a3 100644
--- a/arms/src/main/java/com/jess/arms/di/module/ClientModule.java
+++ b/arms/src/main/java/com/jess/arms/di/module/ClientModule.java
@@ -17,23 +17,28 @@
import android.app.Application;
import android.content.Context;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+
import com.google.gson.Gson;
import com.jess.arms.http.GlobalHttpHandler;
import com.jess.arms.http.log.RequestInterceptor;
import com.jess.arms.utils.DataHelper;
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
-import io.rx_cache2.internal.RxCache;
-import io.victoralbertos.jolyglot.GsonSpeaker;
+
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
+
import javax.inject.Named;
import javax.inject.Singleton;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import io.rx_cache2.internal.RxCache;
+import io.victoralbertos.jolyglot.GsonSpeaker;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener;
import okhttp3.Dispatcher;
@@ -61,12 +66,12 @@ public abstract class ClientModule {
/**
* 提供 {@link Retrofit}
*
- * @param application
- * @param configuration
- * @param builder
- * @param client
- * @param httpUrl
- * @param gson
+ * @param application {@link Application}
+ * @param configuration {@link RetrofitConfiguration}
+ * @param builder {@link Retrofit.Builder}
+ * @param client {@link OkHttpClient}
+ * @param httpUrl {@link HttpUrl}
+ * @param gson {@link Gson}
* @return {@link Retrofit}
*/
@Singleton
@@ -75,13 +80,13 @@ static Retrofit provideRetrofit(Application application, @Nullable RetrofitConfi
, HttpUrl httpUrl, Gson gson) {
builder
.baseUrl(httpUrl)//域名
- .client(client);//设置okhttp
+ .client(client);//设置 OkHttp
if (configuration != null)
configuration.configRetrofit(application, builder);
builder
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//使用 Rxjava
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//使用 RxJava
.addConverterFactory(GsonConverterFactory.create(gson));//使用 Gson
return builder.build();
}
@@ -89,12 +94,13 @@ static Retrofit provideRetrofit(Application application, @Nullable RetrofitConfi
/**
* 提供 {@link OkHttpClient}
*
- * @param application
- * @param configuration
- * @param builder
- * @param intercept
- * @param interceptors
- * @param handler
+ * @param application {@link Application}
+ * @param configuration {@link OkhttpConfiguration}
+ * @param builder {@link OkHttpClient.Builder}
+ * @param intercept {@link Interceptor}
+ * @param interceptors {@link List}
+ * @param handler {@link GlobalHttpHandler}
+ * @param executorService {@link ExecutorService}
* @return {@link OkHttpClient}
*/
@Singleton
@@ -114,13 +120,14 @@ public Response intercept(Chain chain) throws IOException {
}
});
- if (interceptors != null) {//如果外部提供了interceptor的集合则遍历添加
+ //如果外部提供了 Interceptor 的集合则遍历添加
+ if (interceptors != null) {
for (Interceptor interceptor : interceptors) {
builder.addInterceptor(interceptor);
}
}
- // 为 OkHttp 设置默认的线程池。
+ //为 OkHttp 设置默认的线程池
builder.dispatcher(new Dispatcher(executorService));
if (configuration != null)
@@ -146,9 +153,10 @@ static OkHttpClient.Builder provideClientBuilder() {
/**
* 提供 {@link RxCache}
*
- * @param application
- * @param configuration
- * @param cacheDirectory cacheDirectory RxCache缓存路径
+ * @param application {@link Application}
+ * @param configuration {@link RxCacheConfiguration}
+ * @param cacheDirectory RxCache 缓存路径
+ * @param gson {@link Gson}
* @return {@link RxCache}
*/
@Singleton
@@ -166,9 +174,9 @@ static RxCache provideRxCache(Application application, @Nullable RxCacheConfigur
}
/**
- * 需要单独给 {@link RxCache} 提供缓存路径
+ * 需要单独给 {@link RxCache} 提供子缓存文件
*
- * @param cacheDir
+ * @param cacheDir 框架缓存文件
* @return {@link File}
*/
@Singleton
@@ -182,8 +190,8 @@ static File provideRxCacheDirectory(File cacheDir) {
/**
* 提供处理 RxJava 错误的管理器
*
- * @param application
- * @param listener
+ * @param application {@link Application}
+ * @param listener {@link ResponseErrorListener}
* @return {@link RxErrorHandler}
*/
@Singleton
@@ -196,23 +204,32 @@ static RxErrorHandler proRxErrorHandler(Application application, ResponseErrorLi
.build();
}
+ /**
+ * {@link Retrofit} 自定义配置接口
+ */
public interface RetrofitConfiguration {
- void configRetrofit(Context context, Retrofit.Builder builder);
+ void configRetrofit(@NonNull Context context, @NonNull Retrofit.Builder builder);
}
+ /**
+ * {@link OkHttpClient} 自定义配置接口
+ */
public interface OkhttpConfiguration {
- void configOkhttp(Context context, OkHttpClient.Builder builder);
+ void configOkhttp(@NonNull Context context, @NonNull OkHttpClient.Builder builder);
}
+ /**
+ * {@link RxCache} 自定义配置接口
+ */
public interface RxCacheConfiguration {
/**
- * 若想自定义 RxCache 的缓存文件夹或者解析方式, 如改成 fastjson
+ * 若想自定义 RxCache 的缓存文件夹或者解析方式, 如改成 FastJson
* 请 {@code return rxCacheBuilder.persistence(cacheDirectory, new FastJsonSpeaker());}, 否则请 {@code return null;}
*
- * @param context
- * @param builder
+ * @param context {@link Context}
+ * @param builder {@link RxCache.Builder}
* @return {@link RxCache}
*/
- RxCache configRxCache(Context context, RxCache.Builder builder);
+ RxCache configRxCache(@NonNull Context context, @NonNull RxCache.Builder builder);
}
}
diff --git a/arms/src/main/java/com/jess/arms/di/module/GlobalConfigModule.java b/arms/src/main/java/com/jess/arms/di/module/GlobalConfigModule.java
index 2824483ba..91b21cd9c 100644
--- a/arms/src/main/java/com/jess/arms/di/module/GlobalConfigModule.java
+++ b/arms/src/main/java/com/jess/arms/di/module/GlobalConfigModule.java
@@ -19,6 +19,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
+
import com.bumptech.glide.Glide;
import com.jess.arms.http.BaseUrl;
import com.jess.arms.http.GlobalHttpHandler;
@@ -32,8 +33,7 @@
import com.jess.arms.integration.cache.LruCache;
import com.jess.arms.utils.DataHelper;
import com.jess.arms.utils.Preconditions;
-import dagger.Module;
-import dagger.Provides;
+
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -42,7 +42,11 @@
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+
import javax.inject.Singleton;
+
+import dagger.Module;
+import dagger.Provides;
import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
@@ -98,7 +102,6 @@ public static Builder builder() {
return new Builder();
}
-
@Singleton
@Provides
@Nullable
@@ -106,7 +109,6 @@ List provideInterceptors() {
return mInterceptors;
}
-
/**
* 提供 BaseUrl,默认使用 <"https://api.github.com/">
*
@@ -124,7 +126,6 @@ HttpUrl provideBaseUrl() {
return mApiUrl == null ? HttpUrl.parse("https://api.github.com/") : mApiUrl;
}
-
/**
* 提供图片加载框架,默认使用 {@link Glide}
*
@@ -137,7 +138,6 @@ BaseImageLoaderStrategy provideImageLoaderStrategy() {
return mLoaderStrategy;
}
-
/**
* 提供处理 Http 请求和响应结果的处理类
*
@@ -150,7 +150,6 @@ GlobalHttpHandler provideGlobalHttpHandler() {
return mHandler;
}
-
/**
* 提供缓存文件
*/
@@ -160,7 +159,6 @@ File provideCacheFile(Application application) {
return mCacheFile == null ? DataHelper.getCacheFile(application) : mCacheFile;
}
-
/**
* 提供处理 RxJava 错误的管理器的回调
*
@@ -172,7 +170,6 @@ ResponseErrorListener provideResponseErrorListener() {
return mErrorListener == null ? ResponseErrorListener.EMPTY : mErrorListener;
}
-
@Singleton
@Provides
@Nullable
@@ -209,7 +206,7 @@ RequestInterceptor.Level providePrintHttpLogLevel() {
@Singleton
@Provides
- FormatPrinter provideFormatPrinter(){
+ FormatPrinter provideFormatPrinter() {
return mFormatPrinter == null ? new DefaultFormatPrinter() : mFormatPrinter;
}
@@ -222,7 +219,7 @@ Cache.Factory provideCacheFactory(Application application) {
public Cache build(CacheType type) {
//若想自定义 LruCache 的 size, 或者不想使用 LruCache, 想使用自己自定义的策略
//使用 GlobalConfigModule.Builder#cacheFactory() 即可扩展
- switch (type.getCacheTypeId()){
+ switch (type.getCacheTypeId()) {
//Activity、Fragment 以及 Extras 使用 IntelligentCache (具有 LruCache 和 可永久存储数据的 Map)
case CacheType.EXTRAS_TYPE_ID:
case CacheType.ACTIVITY_CACHE_TYPE_ID:
@@ -249,7 +246,6 @@ ExecutorService provideExecutorService() {
new SynchronousQueue(), Util.threadFactory("Arms Executor", false)) : mExecutorService;
}
-
public static final class Builder {
private HttpUrl apiUrl;
private BaseUrl baseUrl;
@@ -300,13 +296,11 @@ public Builder addInterceptor(Interceptor interceptor) {//动态添加任意个i
return this;
}
-
public Builder responseErrorListener(ResponseErrorListener listener) {//处理所有RxJava的onError逻辑
this.responseErrorListener = listener;
return this;
}
-
public Builder cacheFile(File cacheFile) {
this.cacheFile = cacheFile;
return this;
@@ -337,7 +331,7 @@ public Builder printHttpLogLevel(RequestInterceptor.Level printHttpLogLevel) {//
return this;
}
- public Builder formatPrinter(FormatPrinter formatPrinter){
+ public Builder formatPrinter(FormatPrinter formatPrinter) {
this.formatPrinter = Preconditions.checkNotNull(formatPrinter, FormatPrinter.class.getCanonicalName() + "can not be null.");
return this;
}
@@ -355,9 +349,5 @@ public Builder executorService(ExecutorService executorService) {
public GlobalConfigModule build() {
return new GlobalConfigModule(this);
}
-
-
}
-
-
}
diff --git a/arms/src/main/java/com/jess/arms/http/BaseUrl.java b/arms/src/main/java/com/jess/arms/http/BaseUrl.java
index 56495e7ca..be68196ce 100644
--- a/arms/src/main/java/com/jess/arms/http/BaseUrl.java
+++ b/arms/src/main/java/com/jess/arms/http/BaseUrl.java
@@ -15,6 +15,8 @@
*/
package com.jess.arms.http;
+import android.support.annotation.NonNull;
+
import okhttp3.HttpUrl;
/**
@@ -32,5 +34,6 @@ public interface BaseUrl {
*
* @return
*/
+ @NonNull
HttpUrl url();
}
diff --git a/arms/src/main/java/com/jess/arms/http/GlobalHttpHandler.java b/arms/src/main/java/com/jess/arms/http/GlobalHttpHandler.java
index 13d8d4b71..6929b5a70 100644
--- a/arms/src/main/java/com/jess/arms/http/GlobalHttpHandler.java
+++ b/arms/src/main/java/com/jess/arms/http/GlobalHttpHandler.java
@@ -15,6 +15,9 @@
*/
package com.jess.arms.http;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
import com.jess.arms.di.module.GlobalConfigModule;
import okhttp3.Interceptor;
@@ -33,23 +36,46 @@
* ================================================
*/
public interface GlobalHttpHandler {
- Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response);
- Request onHttpRequestBefore(Interceptor.Chain chain, Request request);
+ /**
+ * 这里可以先客户端一步拿到每一次 Http 请求的结果, 可以先解析成 Json, 再做一些操作, 如检测到 token 过期后
+ * 重新请求 token, 并重新执行请求
+ *
+ * @param httpResult 服务器返回的结果 (已被框架自动转换为字符串)
+ * @param chain {@link okhttp3.Interceptor.Chain}
+ * @param response {@link Response}
+ * @return {@link Response}
+ */
+ @NonNull
+ Response onHttpResultResponse(@Nullable String httpResult, @NonNull Interceptor.Chain chain, @NonNull Response response);
+
+ /**
+ * 这里可以在请求服务器之前拿到 {@link Request}, 做一些操作比如给 {@link Request} 统一添加 token 或者 header 以及参数加密等操作
+ *
+ * @param chain {@link okhttp3.Interceptor.Chain}
+ * @param request {@link Request}
+ * @return {@link Request}
+ */
+ @NonNull
+ Request onHttpRequestBefore(@NonNull Interceptor.Chain chain, @NonNull Request request);
- //空实现
+ /**
+ * 空实现
+ */
GlobalHttpHandler EMPTY = new GlobalHttpHandler() {
+
+ @NonNull
@Override
- public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {
- //不管是否处理,都必须将response返回出去
+ public Response onHttpResultResponse(@Nullable String httpResult, @NonNull Interceptor.Chain chain, @NonNull Response response) {
+ //不管是否处理, 都必须将 response 返回出去
return response;
}
+ @NonNull
@Override
- public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) {
- //不管是否处理,都必须将request返回出去
+ public Request onHttpRequestBefore(@NonNull Interceptor.Chain chain, @NonNull Request request) {
+ //不管是否处理, 都必须将 request 返回出去
return request;
}
};
-
}
diff --git a/arms/src/main/java/com/jess/arms/http/imageloader/BaseImageLoaderStrategy.java b/arms/src/main/java/com/jess/arms/http/imageloader/BaseImageLoaderStrategy.java
index 76c8e5ace..0af6db10c 100644
--- a/arms/src/main/java/com/jess/arms/http/imageloader/BaseImageLoaderStrategy.java
+++ b/arms/src/main/java/com/jess/arms/http/imageloader/BaseImageLoaderStrategy.java
@@ -16,6 +16,7 @@
package com.jess.arms.http.imageloader;
import android.content.Context;
+import android.support.annotation.Nullable;
/**
* ================================================
@@ -28,19 +29,20 @@
* ================================================
*/
public interface BaseImageLoaderStrategy {
+
/**
* 加载图片
*
- * @param ctx
- * @param config
+ * @param ctx {@link Context}
+ * @param config 图片加载配置信息
*/
- void loadImage(Context ctx, T config);
+ void loadImage(@Nullable Context ctx, @Nullable T config);
/**
* 停止加载
*
- * @param ctx
- * @param config
+ * @param ctx {@link Context}
+ * @param config 图片加载配置信息
*/
- void clear(Context ctx, T config);
+ void clear(@Nullable Context ctx, @Nullable T config);
}
diff --git a/arms/src/main/java/com/jess/arms/http/imageloader/ImageConfig.java b/arms/src/main/java/com/jess/arms/http/imageloader/ImageConfig.java
index f7488fb23..1e4b6303c 100644
--- a/arms/src/main/java/com/jess/arms/http/imageloader/ImageConfig.java
+++ b/arms/src/main/java/com/jess/arms/http/imageloader/ImageConfig.java
@@ -33,7 +33,6 @@ public class ImageConfig {
protected int placeholder;//占位符
protected int errorPic;//错误占位符
-
public String getUrl() {
return url;
}
diff --git a/arms/src/main/java/com/jess/arms/http/imageloader/ImageLoader.java b/arms/src/main/java/com/jess/arms/http/imageloader/ImageLoader.java
index fcfec59a6..d97319768 100644
--- a/arms/src/main/java/com/jess/arms/http/imageloader/ImageLoader.java
+++ b/arms/src/main/java/com/jess/arms/http/imageloader/ImageLoader.java
@@ -45,7 +45,6 @@ public final class ImageLoader {
public ImageLoader() {
}
-
/**
* 加载图片
*
diff --git a/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideAppliesOptions.java b/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideAppliesOptions.java
index dfe0188fc..09c2d8212 100644
--- a/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideAppliesOptions.java
+++ b/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideAppliesOptions.java
@@ -16,6 +16,7 @@
package com.jess.arms.http.imageloader.glide;
import android.content.Context;
+import android.support.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
@@ -31,7 +32,6 @@
* Follow me
* ================================================
*/
-
public interface GlideAppliesOptions {
/**
@@ -40,5 +40,5 @@ public interface GlideAppliesOptions {
* @param context
* @param builder {@link GlideBuilder} 此类被用来创建 Glide
*/
- void applyGlideOptions(Context context, GlideBuilder builder);
+ void applyGlideOptions(@NonNull Context context, @NonNull GlideBuilder builder);
}
diff --git a/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideConfiguration.java b/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideConfiguration.java
index 983673cda..0d3ffb254 100644
--- a/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideConfiguration.java
+++ b/arms/src/main/java/com/jess/arms/http/imageloader/glide/GlideConfiguration.java
@@ -16,6 +16,7 @@
package com.jess.arms.http.imageloader.glide;
import android.content.Context;
+import android.support.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
@@ -52,7 +53,7 @@ public class GlideConfiguration extends AppGlideModule {
public static final int IMAGE_DISK_CACHE_MAX_SIZE = 100 * 1024 * 1024;//图片缓存文件最大值为100Mb
@Override
- public void applyOptions(Context context, GlideBuilder builder) {
+ public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
final AppComponent appComponent = ArmsUtils.obtainAppComponentFromContext(context);
builder.setDiskCache(new DiskCache.Factory() {
@Override
@@ -82,7 +83,7 @@ public DiskCache build() {
}
@Override
- public void registerComponents(Context context, Glide glide, Registry registry) {
+ public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
//Glide 默认使用 HttpURLConnection 做网络请求,在这切换成 Okhttp 请求
AppComponent appComponent = ArmsUtils.obtainAppComponentFromContext(context);
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(appComponent.okHttpClient()));
diff --git a/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java b/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java
index 9be062058..0eff6c8e6 100644
--- a/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java
+++ b/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java
@@ -15,6 +15,8 @@
*/
package com.jess.arms.http.log;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.jess.arms.di.module.GlobalConfigModule;
@@ -37,7 +39,6 @@
* Follow me
* ================================================
*/
-
public class DefaultFormatPrinter implements FormatPrinter {
private static final String TAG = "ArmsHttpLog";
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
@@ -62,7 +63,6 @@ public class DefaultFormatPrinter implements FormatPrinter {
private static final String CENTER_LINE = "├ ";
private static final String DEFAULT_LINE = "│ ";
-
private static boolean isEmpty(String line) {
return TextUtils.isEmpty(line) || N.equals(line) || T.equals(line) || TextUtils.isEmpty(line.trim());
}
@@ -74,7 +74,7 @@ private static boolean isEmpty(String line) {
* @param bodyString
*/
@Override
- public void printJsonRequest(Request request, String bodyString) {
+ public void printJsonRequest(@NonNull Request request, @NonNull String bodyString) {
final String requestBody = LINE_SEPARATOR + BODY_TAG + LINE_SEPARATOR + bodyString;
final String tag = getTag(true);
@@ -91,7 +91,7 @@ public void printJsonRequest(Request request, String bodyString) {
* @param request
*/
@Override
- public void printFileRequest(Request request) {
+ public void printFileRequest(@NonNull Request request) {
final String tag = getTag(true);
LogUtils.debugInfo(tag, REQUEST_UP_LINE);
@@ -115,8 +115,8 @@ public void printFileRequest(Request request) {
* @param responseUrl 请求地址
*/
@Override
- public void printJsonResponse(long chainMs, boolean isSuccessful, int code, String headers, MediaType contentType,
- String bodyString, List segments, String message, final String responseUrl) {
+ public void printJsonResponse(long chainMs, boolean isSuccessful, int code, @NonNull String headers, @Nullable MediaType contentType,
+ @Nullable String bodyString, @NonNull List segments, @NonNull String message, @NonNull final String responseUrl) {
bodyString = RequestInterceptor.isJson(contentType) ? CharacterHandler.jsonFormat(bodyString)
: RequestInterceptor.isXml(contentType) ? CharacterHandler.xmlFormat(bodyString) : bodyString;
@@ -143,8 +143,8 @@ public void printJsonResponse(long chainMs, boolean isSuccessful, int code, Stri
* @param responseUrl 请求地址
*/
@Override
- public void printFileResponse(long chainMs, boolean isSuccessful, int code, String headers,
- List segments, String message, final String responseUrl) {
+ public void printFileResponse(long chainMs, boolean isSuccessful, int code, @NonNull String headers,
+ @NonNull List segments, @NonNull String message, @NonNull final String responseUrl) {
final String tag = getTag(false);
final String[] urlLine = {URL_TAG + responseUrl, N};
@@ -155,7 +155,6 @@ public void printFileResponse(long chainMs, boolean isSuccessful, int code, Stri
LogUtils.debugInfo(tag, END_LINE);
}
-
/**
* 对 {@code lines} 中的信息进行逐行打印
*
@@ -210,7 +209,6 @@ private static String resolveTag(String tag) {
return computeKey() + tag;
}
-
private static String[] getRequest(Request request) {
String log;
String header = request.headers().toString();
@@ -267,7 +265,6 @@ private static String dotHeaders(String header) {
return builder.toString();
}
-
private static String getTag(boolean isRequest) {
if (isRequest) {
return TAG + "-Request";
@@ -275,5 +272,4 @@ private static String getTag(boolean isRequest) {
return TAG + "-Response";
}
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/http/log/FormatPrinter.java b/arms/src/main/java/com/jess/arms/http/log/FormatPrinter.java
index 02296ad9e..e24ece00f 100644
--- a/arms/src/main/java/com/jess/arms/http/log/FormatPrinter.java
+++ b/arms/src/main/java/com/jess/arms/http/log/FormatPrinter.java
@@ -15,6 +15,9 @@
*/
package com.jess.arms.http.log;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
import com.jess.arms.di.module.GlobalConfigModule;
import java.util.List;
@@ -42,42 +45,42 @@ public interface FormatPrinter {
* @param request
* @param bodyString 发送给服务器的请求体中的数据(已解析)
*/
- void printJsonRequest(Request request, String bodyString);
+ void printJsonRequest(@NonNull Request request, @NonNull String bodyString);
/**
* 打印网络请求信息, 当网络请求时 {{@link okhttp3.RequestBody}} 为 {@code null} 或不可解析的情况
*
* @param request
*/
- void printFileRequest(Request request);
+ void printFileRequest(@NonNull Request request);
/**
* 打印网络响应信息, 当网络响应时 {{@link okhttp3.ResponseBody}} 可以解析的情况
*
- * @param chainMs 服务器响应耗时(单位毫秒)
+ * @param chainMs 服务器响应耗时(单位毫秒)
* @param isSuccessful 请求是否成功
- * @param code 响应码
- * @param headers 请求头
- * @param contentType 服务器返回数据的数据类型
- * @param bodyString 服务器返回的数据(已解析)
- * @param segments 域名后面的资源地址
- * @param message 响应信息
- * @param responseUrl 请求地址
+ * @param code 响应码
+ * @param headers 请求头
+ * @param contentType 服务器返回数据的数据类型
+ * @param bodyString 服务器返回的数据(已解析)
+ * @param segments 域名后面的资源地址
+ * @param message 响应信息
+ * @param responseUrl 请求地址
*/
- void printJsonResponse(long chainMs, boolean isSuccessful, int code, String headers, MediaType contentType,
- String bodyString, List segments, String message, String responseUrl);
+ void printJsonResponse(long chainMs, boolean isSuccessful, int code, @NonNull String headers, @Nullable MediaType contentType,
+ @Nullable String bodyString, @NonNull List segments, @NonNull String message, @NonNull String responseUrl);
/**
* 打印网络响应信息, 当网络响应时 {{@link okhttp3.ResponseBody}} 为 {@code null} 或不可解析的情况
*
- * @param chainMs 服务器响应耗时(单位毫秒)
+ * @param chainMs 服务器响应耗时(单位毫秒)
* @param isSuccessful 请求是否成功
- * @param code 响应码
- * @param headers 请求头
- * @param segments 域名后面的资源地址
- * @param message 响应信息
- * @param responseUrl 请求地址
+ * @param code 响应码
+ * @param headers 请求头
+ * @param segments 域名后面的资源地址
+ * @param message 响应信息
+ * @param responseUrl 请求地址
*/
- void printFileResponse(long chainMs, boolean isSuccessful, int code, String headers,
- List segments, String message, String responseUrl);
+ void printFileResponse(long chainMs, boolean isSuccessful, int code, @NonNull String headers,
+ @NonNull List segments, @NonNull String message, @NonNull String responseUrl);
}
diff --git a/arms/src/main/java/com/jess/arms/http/log/RequestInterceptor.java b/arms/src/main/java/com/jess/arms/http/log/RequestInterceptor.java
index 4f4e75d23..0d6950a15 100644
--- a/arms/src/main/java/com/jess/arms/http/log/RequestInterceptor.java
+++ b/arms/src/main/java/com/jess/arms/http/log/RequestInterceptor.java
@@ -179,7 +179,6 @@ private String printResult(Request request, Response response, boolean logRespon
}
}
-
/**
* 解析服务器响应的内容
*
@@ -282,5 +281,4 @@ public static String convertCharset(Charset charset) {
return s;
return s.substring(i + 1, s.length() - 1);
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java b/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
index a3e469c0a..2575df4d4 100644
--- a/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
+++ b/arms/src/main/java/com/jess/arms/integration/ActivityLifecycle.java
@@ -197,5 +197,4 @@ private Cache getCacheFromActivity(IActivity activity) {
Preconditions.checkNotNull(cache, "%s cannot be null on Activity", Cache.class.getName());
return cache;
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/integration/AppManager.java b/arms/src/main/java/com/jess/arms/integration/AppManager.java
index 386997210..603c36eb8 100644
--- a/arms/src/main/java/com/jess/arms/integration/AppManager.java
+++ b/arms/src/main/java/com/jess/arms/integration/AppManager.java
@@ -43,9 +43,7 @@
/**
* ================================================
- * 用于管理所有 {@link Activity},和在前台的 {@link Activity}
- * 可以通过直接持有 {@link AppManager} 对象执行对应方法
- * 也可以通过 {@link #post(Message)} ,远程遥控执行对应方法,用法和 EventBus 类似
+ * 用于管理所有 {@link Activity}, 和在前台的 {@link Activity}
*
* @see AppManager wiki 官方文档
* Created by JessYan on 14/12/2016 13:50
@@ -254,7 +252,6 @@ public Activity getTopActivity() {
return mActivityList.size() > 0 ? mActivityList.get(mActivityList.size() - 1) : null;
}
-
/**
* 返回一个存储所有未销毁的 {@link Activity} 的集合
*
@@ -267,7 +264,6 @@ public List getActivityList() {
return mActivityList;
}
-
/**
* 添加 {@link Activity} 到集合
*/
@@ -338,7 +334,6 @@ public void killActivity(Class> activityClass) {
}
}
-
/**
* 指定的 {@link Activity} 实例是否存活
*
@@ -353,7 +348,6 @@ public boolean activityInstanceIsLive(Activity activity) {
return mActivityList.contains(activity);
}
-
/**
* 指定的 {@link Activity} class 是否存活(同一个 {@link Activity} class 可能有多个实例)
*
@@ -373,7 +367,6 @@ public boolean activityClassIsLive(Class> activityClass) {
return false;
}
-
/**
* 获取指定 {@link Activity} class 的实例,没有则返回 null(同一个 {@link Activity} class 有多个实例,则返回最早创建的实例)
*
@@ -393,7 +386,6 @@ public Activity findActivity(Class> activityClass) {
return null;
}
-
/**
* 关闭所有 {@link Activity}
*/
@@ -453,7 +445,6 @@ public void killAll(String... excludeActivityName) {
}
}
-
/**
* 退出应用程序
*
diff --git a/arms/src/main/java/com/jess/arms/integration/ConfigModule.java b/arms/src/main/java/com/jess/arms/integration/ConfigModule.java
index 9c6dd5b73..1b14a78d9 100644
--- a/arms/src/main/java/com/jess/arms/integration/ConfigModule.java
+++ b/arms/src/main/java/com/jess/arms/integration/ConfigModule.java
@@ -15,8 +15,11 @@
*/
package com.jess.arms.integration;
+import android.app.Activity;
import android.app.Application;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import com.jess.arms.base.delegate.AppLifecycles;
@@ -36,35 +39,34 @@
*/
public interface ConfigModule {
/**
- * 使用{@link GlobalConfigModule.Builder}给框架配置一些配置参数
+ * 使用 {@link GlobalConfigModule.Builder} 给框架配置一些配置参数
*
- * @param context
- * @param builder
+ * @param context {@link Context}
+ * @param builder {@link GlobalConfigModule.Builder}
*/
- void applyOptions(Context context, GlobalConfigModule.Builder builder);
+ void applyOptions(@NonNull Context context, @NonNull GlobalConfigModule.Builder builder);
/**
- * 使用{@link AppLifecycles}在Application的生命周期中注入一些操作
+ * 使用 {@link AppLifecycles} 在 {@link Application} 的生命周期中注入一些操作
*
- * @param context
- * @param lifecycles
+ * @param context {@link Context}
+ * @param lifecycles {@link Application} 的生命周期容器, 可向框架中添加多个 {@link Application} 的生命周期类
*/
- void injectAppLifecycle(Context context, List lifecycles);
+ void injectAppLifecycle(@NonNull Context context, @NonNull List lifecycles);
/**
- * 使用{@link Application.ActivityLifecycleCallbacks}在Activity的生命周期中注入一些操作
+ * 使用 {@link Application.ActivityLifecycleCallbacks} 在 {@link Activity} 的生命周期中注入一些操作
*
- * @param context
- * @param lifecycles
+ * @param context {@link Context}
+ * @param lifecycles {@link Activity} 的生命周期容器, 可向框架中添加多个 {@link Activity} 的生命周期类
*/
- void injectActivityLifecycle(Context context, List lifecycles);
-
+ void injectActivityLifecycle(@NonNull Context context, @NonNull List lifecycles);
/**
- * 使用{@link FragmentManager.FragmentLifecycleCallbacks}在Fragment的生命周期中注入一些操作
+ * 使用 {@link FragmentManager.FragmentLifecycleCallbacks} 在 {@link Fragment} 的生命周期中注入一些操作
*
- * @param context
- * @param lifecycles
+ * @param context {@link Context}
+ * @param lifecycles {@link Fragment} 的生命周期容器, 可向框架中添加多个 {@link Fragment} 的生命周期类
*/
- void injectFragmentLifecycle(Context context, List lifecycles);
+ void injectFragmentLifecycle(@NonNull Context context, @NonNull List lifecycles);
}
diff --git a/arms/src/main/java/com/jess/arms/integration/FragmentLifecycle.java b/arms/src/main/java/com/jess/arms/integration/FragmentLifecycle.java
index 34bb86ae8..b2d8bbbd4 100644
--- a/arms/src/main/java/com/jess/arms/integration/FragmentLifecycle.java
+++ b/arms/src/main/java/com/jess/arms/integration/FragmentLifecycle.java
@@ -164,5 +164,4 @@ private Cache getCacheFromFragment(IFragment fragment) {
Preconditions.checkNotNull(cache, "%s cannot be null on Fragment", Cache.class.getName());
return cache;
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/integration/IRepositoryManager.java b/arms/src/main/java/com/jess/arms/integration/IRepositoryManager.java
index f0db7c2b3..194b655f3 100644
--- a/arms/src/main/java/com/jess/arms/integration/IRepositoryManager.java
+++ b/arms/src/main/java/com/jess/arms/integration/IRepositoryManager.java
@@ -16,6 +16,7 @@
package com.jess.arms.integration;
import android.content.Context;
+import android.support.annotation.NonNull;
import com.jess.arms.mvp.IModel;
@@ -35,26 +36,34 @@ public interface IRepositoryManager {
/**
* 根据传入的 Class 获取对应的 Retrofit service
*
- * @param service
- * @param
- * @return
+ * @param service Retrofit service class
+ * @param Retrofit service 类型
+ * @return Retrofit service
*/
- T obtainRetrofitService(Class service);
+ @NonNull
+ T obtainRetrofitService(@NonNull Class service);
+
/**
* 根据传入的 Class 获取对应的 RxCache service
*
- * @param cache
- * @param
- * @return
+ * @param cache RxCache service class
+ * @param RxCache service 类型
+ * @return RxCache service
*/
- T obtainCacheService(Class cache);
+ @NonNull
+ T obtainCacheService(@NonNull Class cache);
/**
* 清理所有缓存
*/
void clearAllCache();
+ /**
+ * 获取 {@link Context}
+ *
+ * @return {@link Context}
+ */
+ @NonNull
Context getContext();
-
}
diff --git a/arms/src/main/java/com/jess/arms/integration/ManifestParser.java b/arms/src/main/java/com/jess/arms/integration/ManifestParser.java
index 821cde1aa..f3c8f5659 100644
--- a/arms/src/main/java/com/jess/arms/integration/ManifestParser.java
+++ b/arms/src/main/java/com/jess/arms/integration/ManifestParser.java
@@ -34,7 +34,6 @@
*/
public final class ManifestParser {
private static final String MODULE_VALUE = "ConfigModule";
-
private final Context context;
public ManifestParser(Context context) {
diff --git a/arms/src/main/java/com/jess/arms/integration/RepositoryManager.java b/arms/src/main/java/com/jess/arms/integration/RepositoryManager.java
index f66efee49..6b49deb88 100644
--- a/arms/src/main/java/com/jess/arms/integration/RepositoryManager.java
+++ b/arms/src/main/java/com/jess/arms/integration/RepositoryManager.java
@@ -17,24 +17,21 @@
import android.app.Application;
import android.content.Context;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-
import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.CacheType;
import com.jess.arms.mvp.IModel;
import com.jess.arms.utils.Preconditions;
-
+import dagger.Lazy;
+import io.reactivex.Observable;
+import io.reactivex.Single;
+import io.rx_cache2.internal.RxCache;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-
import javax.inject.Inject;
import javax.inject.Singleton;
-
-import dagger.Lazy;
-import io.reactivex.Observable;
-import io.reactivex.schedulers.Schedulers;
-import io.rx_cache2.internal.RxCache;
import retrofit2.Retrofit;
/**
@@ -70,11 +67,12 @@ public RepositoryManager() {
* 根据传入的 Class 获取对应的 Retrofit service
*
* @param serviceClass ApiService class
- * @param ApiService class
+ * @param ApiService class
* @return ApiService
*/
+ @NonNull
@Override
- public synchronized T obtainRetrofitService(Class serviceClass) {
+ public synchronized T obtainRetrofitService(@NonNull Class serviceClass) {
return createWrapperService(serviceClass);
}
@@ -82,27 +80,41 @@ public synchronized T obtainRetrofitService(Class serviceClass) {
* 根据 https://zhuanlan.zhihu.com/p/40097338 对 Retrofit 进行的优化
*
* @param serviceClass ApiService class
- * @param ApiService class
+ * @param ApiService class
* @return ApiService
*/
private T createWrapperService(Class serviceClass) {
- // 通过二次代理,对 Retrofit 代理方法的调用包进新的 Observable 里在 io 线程执行。
+ Preconditions.checkNotNull(serviceClass, "serviceClass == null");
+
+ // 二次代理
return (T) Proxy.newProxyInstance(serviceClass.getClassLoader(),
new Class>[]{serviceClass}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, @Nullable Object[] args)
throws Throwable {
+ // 此处在调用 serviceClass 中的方法时触发
+
if (method.getReturnType() == Observable.class) {
- // 如果方法返回值是 Observable 的话,则包一层再返回
+ // 如果方法返回值是 Observable 的话,则包一层再返回,
+ // 只包一层 defer 由外部去控制耗时方法以及网络请求所处线程,
+ // 如此对原项目的影响为 0,且更可控。
return Observable.defer(() -> {
final T service = getRetrofitService(serviceClass);
// 执行真正的 Retrofit 动态代理的方法
return ((Observable) getRetrofitMethod(service, method)
- .invoke(service, args))
- .subscribeOn(Schedulers.io());
- }).subscribeOn(Schedulers.single());
+ .invoke(service, args));
+ });
+ } else if (method.getReturnType() == Single.class) {
+ // 如果方法返回值是 Single 的话,则包一层再返回。
+ return Single.defer(() -> {
+ final T service = getRetrofitService(serviceClass);
+ // 执行真正的 Retrofit 动态代理的方法
+ return ((Single) getRetrofitMethod(service, method)
+ .invoke(service, args));
+ });
}
- // 返回值不是 Observable 的话不处理
+
+ // 返回值不是 Observable 或 Single 的话不处理。
final T service = getRetrofitService(serviceClass);
return getRetrofitMethod(service, method).invoke(service, args);
}
@@ -113,7 +125,7 @@ public Object invoke(Object proxy, Method method, @Nullable Object[] args)
* 根据传入的 Class 获取对应的 Retrofit service
*
* @param serviceClass ApiService class
- * @param ApiService class
+ * @param ApiService class
* @return ApiService
*/
private T getRetrofitService(Class serviceClass) {
@@ -138,11 +150,13 @@ private Method getRetrofitMethod(T service, Method method) throws NoSuchMeth
* 根据传入的 Class 获取对应的 RxCache service
*
* @param cacheClass Cache class
- * @param Cache class
+ * @param Cache class
* @return Cache
*/
+ @NonNull
@Override
- public synchronized T obtainCacheService(Class cacheClass) {
+ public synchronized T obtainCacheService(@NonNull Class cacheClass) {
+ Preconditions.checkNotNull(cacheClass, "cacheClass == null");
if (mCacheServiceCache == null) {
mCacheServiceCache = mCachefactory.build(CacheType.CACHE_SERVICE_CACHE);
}
@@ -164,6 +178,7 @@ public void clearAllCache() {
mRxCache.get().evictAll().subscribe();
}
+ @NonNull
@Override
public Context getContext() {
return mApplication;
diff --git a/arms/src/main/java/com/jess/arms/integration/cache/Cache.java b/arms/src/main/java/com/jess/arms/integration/cache/Cache.java
index 4630d836a..872aa1d6d 100644
--- a/arms/src/main/java/com/jess/arms/integration/cache/Cache.java
+++ b/arms/src/main/java/com/jess/arms/integration/cache/Cache.java
@@ -37,6 +37,7 @@
* ================================================
*/
public interface Cache {
+
interface Factory {
/**
diff --git a/arms/src/main/java/com/jess/arms/integration/lifecycle/FragmentLifecycleForRxLifecycle.java b/arms/src/main/java/com/jess/arms/integration/lifecycle/FragmentLifecycleForRxLifecycle.java
index da1cb00f9..104e93566 100644
--- a/arms/src/main/java/com/jess/arms/integration/lifecycle/FragmentLifecycleForRxLifecycle.java
+++ b/arms/src/main/java/com/jess/arms/integration/lifecycle/FragmentLifecycleForRxLifecycle.java
@@ -52,7 +52,6 @@ public void onFragmentAttached(FragmentManager fm, Fragment f, Context context)
}
}
-
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
if (f instanceof FragmentLifecycleable) {
@@ -60,7 +59,6 @@ public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstan
}
}
-
@Override
public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
if (f instanceof FragmentLifecycleable) {
diff --git a/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java b/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java
index 1a4798c56..a32e24d5b 100644
--- a/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java
+++ b/arms/src/main/java/com/jess/arms/mvp/BasePresenter.java
@@ -46,7 +46,6 @@
public class BasePresenter implements IPresenter, LifecycleObserver {
protected final String TAG = this.getClass().getSimpleName();
protected CompositeDisposable mCompositeDisposable;
-
protected M mModel;
protected V mRootView;
@@ -79,7 +78,6 @@ public BasePresenter() {
onStart();
}
-
@Override
public void onStart() {
//将 LifecycleObserver 注册给 LifecycleOwner 后 @OnLifecycleEvent 才可以正常使用
@@ -89,8 +87,8 @@ public void onStart() {
((LifecycleOwner) mRootView).getLifecycle().addObserver((LifecycleObserver) mModel);
}
}
- if (useEventBus())//如果要使用 Eventbus 请将此方法返回 true
- EventBusManager.getInstance().register(this);//注册 Eventbus
+ if (useEventBus())//如果要使用 EventBus 请将此方法返回 true
+ EventBusManager.getInstance().register(this);//注册 EventBus
}
/**
@@ -98,8 +96,8 @@ public void onStart() {
*/
@Override
public void onDestroy() {
- if (useEventBus())//如果要使用 Eventbus 请将此方法返回 true
- EventBusManager.getInstance().unregister(this);//解除注册 Eventbus
+ if (useEventBus())//如果要使用 EventBus 请将此方法返回 true
+ EventBusManager.getInstance().unregister(this);//注销 EventBus
unDispose();//解除订阅
if (mModel != null)
mModel.onDestroy();
@@ -139,7 +137,6 @@ public boolean useEventBus() {
return true;
}
-
/**
* 将 {@link Disposable} 添加到 {@link CompositeDisposable} 中统一管理
* 可在 {@link Activity#onDestroy()} 中使用 {@link #unDispose()} 停止正在执行的 RxJava 任务,避免内存泄漏
@@ -151,7 +148,7 @@ public void addDispose(Disposable disposable) {
if (mCompositeDisposable == null) {
mCompositeDisposable = new CompositeDisposable();
}
- mCompositeDisposable.add(disposable);//将所有 Disposable 放入集中处理
+ mCompositeDisposable.add(disposable);//将所有 Disposable 放入容器集中处理
}
/**
@@ -162,6 +159,4 @@ public void unDispose() {
mCompositeDisposable.clear();//保证 Activity 结束时取消所有正在执行的订阅
}
}
-
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/ArmsUtils.java b/arms/src/main/java/com/jess/arms/utils/ArmsUtils.java
index 5f4aabafb..e169b52f3 100644
--- a/arms/src/main/java/com/jess/arms/utils/ArmsUtils.java
+++ b/arms/src/main/java/com/jess/arms/utils/ArmsUtils.java
@@ -53,7 +53,6 @@
public class ArmsUtils {
static public Toast mToast;
-
private ArmsUtils() {
throw new IllegalStateException("you can't instantiate me!");
}
@@ -176,7 +175,6 @@ public static String getString(Context context, int stringID) {
*
* @return
*/
-
public static String getString(Context context, String strName) {
return getString(context, getResources(context).getIdentifier(strName, "string", context.getPackageName()));
}
@@ -269,7 +267,6 @@ public static void snackbarTextWithLong(String text) {
AppManager.getAppManager().showSnackbar(text, true);
}
-
/**
* 通过资源id获得drawable
*
@@ -280,7 +277,6 @@ public static Drawable getDrawablebyResource(Context context, int rID) {
return getResources(context).getDrawable(rID);
}
-
/**
* 跳转界面 1, 通过 {@link AppManager#startActivity(Class)}
*
@@ -299,7 +295,6 @@ public static void startActivity(Intent content) {
AppManager.getAppManager().startActivity(content);
}
-
/**
* 跳转界面 3
*
@@ -338,7 +333,6 @@ public static int getScreenHeidth(Context context) {
return getResources(context).getDisplayMetrics().heightPixels;
}
-
/**
* 获得颜色
*/
@@ -373,7 +367,6 @@ public static boolean isEmpty(Object obj) {
return false;
}
-
/**
* MD5
*
@@ -399,7 +392,6 @@ public static String encodeToMD5(String string) {
return hex.toString();
}
-
/**
* 全屏,并且沉侵式状态栏
*
@@ -413,7 +405,6 @@ public static void statuInScreen(Activity activity) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
-
/**
* 配置 RecyclerView
*
@@ -463,5 +454,4 @@ public static AppComponent obtainAppComponentFromContext(Context context) {
Preconditions.checkState(context.getApplicationContext() instanceof App, "%s must be implements %s", context.getApplicationContext().getClass().getName(), App.class.getName());
return ((App) context.getApplicationContext()).getAppComponent();
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/CharacterHandler.java b/arms/src/main/java/com/jess/arms/utils/CharacterHandler.java
index 44e5a60f1..d5ed75533 100644
--- a/arms/src/main/java/com/jess/arms/utils/CharacterHandler.java
+++ b/arms/src/main/java/com/jess/arms/utils/CharacterHandler.java
@@ -52,7 +52,6 @@ private CharacterHandler() {
}
public static final InputFilter emojiFilter = new InputFilter() {//emoji过滤器
-
Pattern emoji = Pattern.compile(
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@@ -70,7 +69,6 @@ public CharSequence filter(CharSequence source, int start, int end, Spanned dest
}
};
-
/**
* 字符串转换成十六进制字符串
*
@@ -92,7 +90,6 @@ public static String str2HexStr(String str) {
return sb.toString().trim();
}
-
/**
* json 格式化
*
@@ -117,11 +114,12 @@ public static String jsonFormat(String json) {
}
} catch (JSONException e) {
message = json;
+ } catch (OutOfMemoryError error) {
+ message = "Output omitted because of Object size";
}
return message;
}
-
/**
* xml 格式化
*
diff --git a/arms/src/main/java/com/jess/arms/utils/DataHelper.java b/arms/src/main/java/com/jess/arms/utils/DataHelper.java
index 12a58a999..2775e3e97 100644
--- a/arms/src/main/java/com/jess/arms/utils/DataHelper.java
+++ b/arms/src/main/java/com/jess/arms/utils/DataHelper.java
@@ -41,7 +41,6 @@ public class DataHelper {
private static SharedPreferences mSharedPreferences;
public static final String SP_NAME = "config";
-
private DataHelper() {
throw new IllegalStateException("you can't instantiate me!");
}
@@ -210,7 +209,6 @@ public static String getCacheFilePath(Context context) {
return "/mnt/sdcard/" + packageName;
}
-
/**
* 创建未存在的文件夹
*
@@ -274,7 +272,6 @@ public static boolean deleteDir(File dir) {
return true;
}
-
public static String bytyToString(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
@@ -286,5 +283,4 @@ public static String bytyToString(InputStream in) throws IOException {
out.close();
return result;
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/DeviceUtils.java b/arms/src/main/java/com/jess/arms/utils/DeviceUtils.java
index 23017e4ee..eddbc9cd7 100644
--- a/arms/src/main/java/com/jess/arms/utils/DeviceUtils.java
+++ b/arms/src/main/java/com/jess/arms/utils/DeviceUtils.java
@@ -63,7 +63,6 @@ public class DeviceUtils {
public static final int NETTYPE_WIFI = 0x01;
public static final int NETTYPE_CMWAP = 0x02;
public static final int NETTYPE_CMNET = 0x03;
-
public static boolean GTE_HC;
public static boolean GTE_ICS;
public static boolean PRE_HC;
@@ -213,7 +212,6 @@ public static int getStatusBarHeight(Context context) {
return 0;
}
-
public static boolean hasBigScreen(Context context) {
boolean flag = true;
if (_hasBigScreen == null) {
@@ -371,7 +369,6 @@ public static boolean isTablet(Context context) {
return _isTablet.booleanValue();
}
-
public static void showAnimatedView(View view) {
if (PRE_HC && view != null)
view.setPadding(0, 0, 0, 0);
@@ -433,7 +430,6 @@ public static String percent2(double p1, double p2) {
return str;
}
-
public static boolean isHaveMarket(Context context) {
Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
@@ -719,7 +715,6 @@ public static int getStatuBarHeight(Context context) {
return sbar;
}
-
public static boolean hasStatusBar(Activity activity) {
WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
if ((attrs.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
@@ -798,8 +793,6 @@ public static boolean isExitsSdcard() {
else
return false;
}
-
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/DrawableProvider.java b/arms/src/main/java/com/jess/arms/utils/DrawableProvider.java
index 76c834746..3ffc89018 100644
--- a/arms/src/main/java/com/jess/arms/utils/DrawableProvider.java
+++ b/arms/src/main/java/com/jess/arms/utils/DrawableProvider.java
@@ -146,7 +146,6 @@ public static Bitmap getReSizeBitmap(Bitmap bitmap, float targetWidth, float tar
return returnBm;
}
-
/**
* 将图片按照某个角度进行旋转
*
@@ -175,7 +174,6 @@ public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {
return returnBm;
}
-
/**
* 读取图片的旋转的角度
*
@@ -206,5 +204,4 @@ public static int getBitmapDegree(String path) {
}
return degree;
}
-
}
\ No newline at end of file
diff --git a/arms/src/main/java/com/jess/arms/utils/PermissionUtil.java b/arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
index 4023a919c..acc1cf7aa 100644
--- a/arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
+++ b/arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
@@ -41,12 +41,12 @@
public class PermissionUtil {
public static final String TAG = "Permission";
-
private PermissionUtil() {
throw new IllegalStateException("you can't instantiate me!");
}
public interface RequestPermission {
+
/**
* 权限请求成功
*/
@@ -67,7 +67,6 @@ public interface RequestPermission {
void onRequestPermissionFailureWithAskNeverAgain(List permissions);
}
-
public static void requestPermission(final RequestPermission requestPermission, RxPermissions rxPermissions, RxErrorHandler errorHandler, String... permissions) {
if (permissions == null || permissions.length == 0) return;
@@ -118,7 +117,6 @@ public void onNext(@NonNull List permissions) {
}
-
/**
* 请求摄像头权限
*/
@@ -126,7 +124,6 @@ public static void launchCamera(RequestPermission requestPermission, RxPermissio
requestPermission(requestPermission, rxPermissions, errorHandler, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA);
}
-
/**
* 请求外部存储的权限
*/
@@ -134,7 +131,6 @@ public static void externalStorage(RequestPermission requestPermission, RxPermis
requestPermission(requestPermission, rxPermissions, errorHandler, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
-
/**
* 请求发送短信权限
*/
@@ -142,7 +138,6 @@ public static void sendSms(RequestPermission requestPermission, RxPermissions rx
requestPermission(requestPermission, rxPermissions, errorHandler, Manifest.permission.SEND_SMS);
}
-
/**
* 请求打电话权限
*/
@@ -150,13 +145,11 @@ public static void callPhone(RequestPermission requestPermission, RxPermissions
requestPermission(requestPermission, rxPermissions, errorHandler, Manifest.permission.CALL_PHONE);
}
-
/**
* 请求获取手机状态的权限
*/
public static void readPhonestate(RequestPermission requestPermission, RxPermissions rxPermissions, RxErrorHandler errorHandler) {
requestPermission(requestPermission, rxPermissions, errorHandler, Manifest.permission.READ_PHONE_STATE);
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/RxLifecycleUtils.java b/arms/src/main/java/com/jess/arms/utils/RxLifecycleUtils.java
index 7e82ac4be..910843b45 100644
--- a/arms/src/main/java/com/jess/arms/utils/RxLifecycleUtils.java
+++ b/arms/src/main/java/com/jess/arms/utils/RxLifecycleUtils.java
@@ -85,7 +85,6 @@ public static LifecycleTransformer bindUntilEvent(@NonNull final Lifec
return RxLifecycle.bindUntilEvent(lifecycleable.provideLifecycleSubject(), event);
}
-
/**
* 绑定 Activity/Fragment 的生命周期
*
@@ -112,5 +111,4 @@ public static LifecycleTransformer bindToLifecycle(@NonNull Lifecycleable
throw new IllegalArgumentException("Lifecycleable not match");
}
}
-
}
diff --git a/arms/src/main/java/com/jess/arms/utils/ZipHelper.java b/arms/src/main/java/com/jess/arms/utils/ZipHelper.java
index 52cd17d0a..2d0cdbb0e 100644
--- a/arms/src/main/java/com/jess/arms/utils/ZipHelper.java
+++ b/arms/src/main/java/com/jess/arms/utils/ZipHelper.java
@@ -39,7 +39,6 @@
*/
public class ZipHelper {
-
private ZipHelper() {
throw new IllegalStateException("you can't instantiate me!");
}
@@ -54,7 +53,6 @@ public static String decompressToStringForZlib(byte[] bytesToDecompress) {
return decompressToStringForZlib(bytesToDecompress, "UTF-8");
}
-
/**
* zlib decompress 2 String
*
@@ -86,7 +84,6 @@ public static String decompressToStringForZlib(byte[] bytesToDecompress, String
}
-
/**
* zlib decompress 2 byte
*
diff --git a/arms/src/main/java/com/jess/arms/widget/CustomPopupWindow.java b/arms/src/main/java/com/jess/arms/widget/CustomPopupWindow.java
index 1734b3957..3770d855e 100644
--- a/arms/src/main/java/com/jess/arms/widget/CustomPopupWindow.java
+++ b/arms/src/main/java/com/jess/arms/widget/CustomPopupWindow.java
@@ -103,7 +103,6 @@ public void show() {//默认显示到中间
}
}
-
public static final class Builder {
private View contentView;
private View parentView;
@@ -132,13 +131,11 @@ public Builder isWrap(boolean isWrap) {
return this;
}
-
public Builder customListener(CustomPopupWindowListener listener) {
this.listener = listener;
return this;
}
-
public Builder isOutsideTouch(boolean isOutsideTouch) {
this.isOutsideTouch = isOutsideTouch;
return this;
@@ -172,5 +169,4 @@ public CustomPopupWindow build() {
public interface CustomPopupWindowListener {
public void initPopupView(View contentView);
}
-
}
diff --git a/build.gradle b/build.gradle
index 7ab2f5a43..38ae60ae2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.android.tools.build:gradle:3.4.2'
//Gradle Android Maven plugin
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
//Gradle Bintray Plugin
diff --git a/config.gradle b/config.gradle
index a9311b60e..93d6d23b3 100644
--- a/config.gradle
+++ b/config.gradle
@@ -5,20 +5,20 @@ ext {
buildToolsVersion : "28.0.3",
minSdkVersion : 14,
targetSdkVersion : 28,
- versionCode : 180,
- versionName : "2.5.0"
+ versionCode : 185,
+ versionName : "2.5.1"
]
version = [
androidSupportSdkVersion: "28.0.0",
- retrofitSdkVersion : "2.4.0",
- dagger2SdkVersion : "2.19",
- glideSdkVersion : "4.8.0",
- butterknifeSdkVersion : "8.8.1",
+ retrofitSdkVersion : "2.6.0",
+ dagger2SdkVersion : "2.23.2",
+ glideSdkVersion : "4.9.0",
+ butterknifeSdkVersion : "9.0.0",
rxlifecycleSdkVersion : "1.0",
rxlifecycle2SdkVersion : "2.2.2",
espressoSdkVersion : "3.0.1",
- canarySdkVersion : "1.5.4"
+ canarySdkVersion : "1.6.3"
]
dependencies = [
@@ -35,7 +35,8 @@ ext {
"retrofit-converter-gson" : "com.squareup.retrofit2:converter-gson:${version["retrofitSdkVersion"]}",
"retrofit-adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava:${version["retrofitSdkVersion"]}",
"retrofit-adapter-rxjava2" : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitSdkVersion"]}",
- "okhttp3" : "com.squareup.okhttp3:okhttp:3.11.0",
+ "okhttp3" : "com.squareup.okhttp3:okhttp:3.12.0",
+ "okhttp4" : "com.squareup.okhttp3:okhttp:4.0.0",
"okhttp-urlconnection" : "com.squareup.okhttp:okhttp-urlconnection:2.0.0",
"glide" : "com.github.bumptech.glide:glide:${version["glideSdkVersion"]}",
"glide-compiler" : "com.github.bumptech.glide:compiler:${version["glideSdkVersion"]}",
@@ -52,7 +53,7 @@ ext {
"nineoldandroids" : "com.nineoldandroids:library:2.4.0",
"paginate" : "com.github.markomilos:paginate:0.5.1",
"vlayout" : "com.alibaba.android:vlayout:1.1.0@aar",
- "autosize" : "me.jessyan:autosize:1.0.6",
+ "autosize" : "me.jessyan:autosize:1.1.2",
//rx1
"rxandroid" : "io.reactivex:rxandroid:1.2.1",
@@ -66,14 +67,14 @@ ext {
"rxerrorhandler" : "me.jessyan:rxerrorhandler:1.0.1",
//rx2
- "rxandroid2" : "io.reactivex.rxjava2:rxandroid:2.1.0",
- "rxjava2" : "io.reactivex.rxjava2:rxjava:2.2.3",
- "rxlifecycle2" : "com.trello.rxlifecycle2:rxlifecycle:${version["rxlifecycle2SdkVersion"]}",
- "rxlifecycle2-android" : "com.trello.rxlifecycle2:rxlifecycle-android:${version["rxlifecycle2SdkVersion"]}",
- "rxlifecycle2-components" : "com.trello.rxlifecycle2:rxlifecycle-components:${version["rxlifecycle2SdkVersion"]}",
- "rxcache2" : "com.github.VictorAlbertos.RxCache:runtime:1.8.3-2.x",
- "rxpermissions2" : "com.github.tbruyelle:rxpermissions:0.10.2",
- "rxerrorhandler2" : "me.jessyan:rxerrorhandler:2.1.1",
+ "rxandroid2" : "io.reactivex.rxjava2:rxandroid:2.1.1",
+ "rxjava2" : "io.reactivex.rxjava2:rxjava:2.2.10",
+ "rxlifecycle2" : "com.trello.rxlifecycle2:rxlifecycle:${version["rxlifecycle2SdkVersion"]}",
+ "rxlifecycle2-android" : "com.trello.rxlifecycle2:rxlifecycle-android:${version["rxlifecycle2SdkVersion"]}",
+ "rxlifecycle2-components" : "com.trello.rxlifecycle2:rxlifecycle-components:${version["rxlifecycle2SdkVersion"]}",
+ "rxcache2" : "com.github.VictorAlbertos.RxCache:runtime:1.8.3-2.x",
+ "rxpermissions2" : "com.github.tbruyelle:rxpermissions:0.10.2",
+ "rxerrorhandler2" : "me.jessyan:rxerrorhandler:2.1.1",
//tools
"dagger2" : "com.google.dagger:dagger:${version["dagger2SdkVersion"]}",
@@ -85,7 +86,7 @@ ext {
"eventbus" : "org.greenrobot:eventbus:3.1.1",
"otto" : "com.squareup:otto:1.3.8",
"gson" : "com.google.code.gson:gson:2.8.5",
- "multidex" : "com.android.support:multidex:1.0.1",
+ "multidex" : "com.android.support:multidex:1.0.3",
"javax.annotation" : "javax.annotation:jsr250-api:1.0",
"arouter" : "com.alibaba:arouter-api:1.3.1",
"arouter-compiler" : "com.alibaba:arouter-compiler:1.1.4",
@@ -107,6 +108,4 @@ ext {
"canary-release" : "com.squareup.leakcanary:leakcanary-android-no-op:${version["canarySdkVersion"]}",
"umeng-analytics" : "com.umeng.analytics:analytics:6.0.1"
]
-
-
}
diff --git a/demo/build.gradle b/demo/build.gradle
index b2f025e75..a8f61a03b 100644
--- a/demo/build.gradle
+++ b/demo/build.gradle
@@ -71,20 +71,20 @@ dependencies {
implementation rootProject.ext.dependencies["paginate"]
//arms
- implementation project(':arms')
- //Github 仓库上最新的 Demo 具有下一个版本的新特性, 所以依赖最新的远程库会出现版本不兼容的情况, 详情请查看 https://github.com/JessYanCoding/MVPArms/wiki/Issues#2
-// implementation 'me.jessyan:arms:2.5.0'
+// implementation project(':arms')
+ implementation 'me.jessyan:arms:2.5.1'
//Arms 核心库不再包含 AndroidAutoLayout, 现在可自行选择屏幕适配方案, 不想使用 AndroidAutoLayout 就不要依赖 arms-autolayout
-// implementation 'me.jessyan:arms-autolayout:2.5.0'
+// implementation 'me.jessyan:arms-autolayout:2.5.1'
//现在已经将 Demo 中的屏幕适配框架从 AndroidAutoLayout 替换为 AndroidAutoSize, AndroidAutoLayout 和 AndroidAutoSize 可以在项目中共存
- //所以旧项目只要依赖 arms-autolayout 即可兼容之前的旧页面, 新页面使用 AndroidAutoSize 进行适配即可
+ //所以旧项目只要依赖 arms-autolayout 即可兼容之前的旧页面, 新页面可以使用 AndroidAutoSize 进行适配, 等有时间了再将旧页面全部替换为 AndroidAutoSize
implementation rootProject.ext.dependencies["autosize"]
//Arms 核心库不再包含 Glide, 想使用其他图片加载框架或者想自行扩展 ImageLoaderStrategy 就不要依赖 arms-imageloader-glide
//依赖 arms-imageloader-glide 后还需要在 GlobalConfiguration 中手动注册 GlideImageLoaderStrategy
- implementation 'me.jessyan:arms-imageloader-glide:2.5.0'
+ implementation 'me.jessyan:arms-imageloader-glide:2.5.1'
+// implementation project(':arms-imageloader-glide')
//test
testImplementation rootProject.ext.dependencies["junit"]
diff --git a/demo/proguard-rules.pro b/demo/proguard-rules.pro
index 657cd45d8..fcfebc681 100644
--- a/demo/proguard-rules.pro
+++ b/demo/proguard-rules.pro
@@ -16,4 +16,4 @@
# public *;
#}
-# 混淆规则在 arms moudule下的proguard-rules.pro中,混淆前先参阅https://github.com/JessYanCoding/MVPArms/wiki#1.5
\ No newline at end of file
+# 混淆规则在 arms moudule 下的 proguard-rules.pro 中, 混淆前先参阅 https://github.com/JessYanCoding/MVPArms/wiki#1.5
\ No newline at end of file
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalConfiguration.java b/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalConfiguration.java
index 9aa1e59fa..4848d0ea3 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalConfiguration.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalConfiguration.java
@@ -17,6 +17,7 @@
import android.app.Application;
import android.content.Context;
+import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import com.jess.arms.base.delegate.AppLifecycles;
import com.jess.arms.di.module.GlobalConfigModule;
@@ -34,7 +35,7 @@
* ================================================
* App 的全局配置信息在此配置, 需要将此实现类声明到 AndroidManifest 中
* ConfigModule 的实现类可以有无数多个, 在 Application 中只是注册回调, 并不会影响性能 (多个 ConfigModule 在多 Module 环境下尤为受用)
- * 不过要注意 ConfigModule 接口的实现类对象是通过反射生成的, 这里会有些性能损耗
+ * ConfigModule 接口的实现类对象是通过反射生成的, 这里会有些性能损耗
*
* @see com.jess.arms.base.delegate.AppDelegate
* @see com.jess.arms.integration.ManifestParser
@@ -51,8 +52,8 @@ public final class GlobalConfiguration implements ConfigModule {
// public static String sDomain = Api.APP_DOMAIN;
@Override
- public void applyOptions(Context context, GlobalConfigModule.Builder builder) {
- if (!BuildConfig.LOG_DEBUG) { //Release 时,让框架不再打印 Http 请求和响应的信息
+ public void applyOptions(@NonNull Context context, @NonNull GlobalConfigModule.Builder builder) {
+ if (!BuildConfig.LOG_DEBUG) { //Release 时, 让框架不再打印 Http 请求和响应的信息
builder.printHttpLogLevel(RequestInterceptor.Level.NONE);
}
@@ -64,7 +65,7 @@ public void applyOptions(Context context, GlobalConfigModule.Builder builder) {
//想支持多 BaseUrl, 以及运行时动态切换任意一个 BaseUrl, 请使用 https://github.com/JessYanCoding/RetrofitUrlManager
//如果 BaseUrl 在 App 启动时不能确定, 需要请求服务器接口动态获取, 请使用以下代码
//以下方式是 Arms 框架自带的切换 BaseUrl 的方式, 在整个 App 生命周期内只能切换一次, 若需要无限次的切换 BaseUrl, 以及各种复杂的应用场景还是需要使用 RetrofitUrlManager 框架
- //以下代码只是配置, 还要使用 Okhttp (AppComponent中提供) 请求服务器获取到正确的 BaseUrl 后赋值给 GlobalConfiguration.sDomain
+ //以下代码只是配置, 还要使用 Okhttp (AppComponent 中提供) 请求服务器获取到正确的 BaseUrl 后赋值给 GlobalConfiguration.sDomain
//切记整个过程必须在第一次调用 Retrofit 接口之前完成, 如果已经调用过 Retrofit 接口, 此种方式将不能切换 BaseUrl
// .baseurl(new BaseUrl() {
// @Override
@@ -114,54 +115,57 @@ public void applyOptions(Context context, GlobalConfigModule.Builder builder) {
// Timber.i("printFileResponse:" + responseUrl);
// }
// })
- // 可以自定义一个单例的线程池供全局使用。
+
+ //可以自定义一个单例的线程池供全局使用
// .executorService(Executors.newCachedThreadPool())
- // 这里提供一个全局处理 Http 请求和响应结果的处理类,可以比客户端提前一步拿到服务器返回的结果,可以做一些操作,比如token超时,重新获取
+
+ //这里提供一个全局处理 Http 请求和响应结果的处理类, 可以比客户端提前一步拿到服务器返回的结果, 可以做一些操作, 比如 Token 超时后, 重新获取 Token
.globalHttpHandler(new GlobalHttpHandlerImpl(context))
- // 用来处理 rxjava 中发生的所有错误,rxjava 中发生的每个错误都会回调此接口
- // rxjava必要要使用ErrorHandleSubscriber(默认实现Subscriber的onError方法),此监听才生效
+ //用来处理 RxJava 中发生的所有错误, RxJava 中发生的每个错误都会回调此接口
+ //RxJava 必须要使用 ErrorHandleSubscriber (默认实现 Subscriber 的 onError 方法), 此监听才生效
.responseErrorListener(new ResponseErrorListenerImpl())
- .gsonConfiguration((context1, gsonBuilder) -> {//这里可以自己自定义配置Gson的参数
+ .gsonConfiguration((context1, gsonBuilder) -> {//这里可以自己自定义配置 Gson 的参数
gsonBuilder
- .serializeNulls()//支持序列化null的参数
- .enableComplexMapKeySerialization();//支持将序列化key为object的map,默认只能序列化key为string的map
+ .serializeNulls()//支持序列化值为 null 的参数
+ .enableComplexMapKeySerialization();//支持将序列化 key 为 Object 的 Map, 默认只能序列化 key 为 String 的 Map
})
- .retrofitConfiguration((context1, retrofitBuilder) -> {//这里可以自己自定义配置Retrofit的参数, 甚至您可以替换框架配置好的 OkHttpClient 对象 (但是不建议这样做, 这样做您将损失框架提供的很多功能)
-// retrofitBuilder.addConverterFactory(FastJsonConverterFactory.create());//比如使用fastjson替代gson
+ .retrofitConfiguration((context1, retrofitBuilder) -> {//这里可以自己自定义配置 Retrofit 的参数, 甚至您可以替换框架配置好的 OkHttpClient 对象 (但是不建议这样做, 这样做您将损失框架提供的很多功能)
+// retrofitBuilder.addConverterFactory(FastJsonConverterFactory.create());//比如使用 FastJson 替代 Gson
})
- .okhttpConfiguration((context1, okhttpBuilder) -> {//这里可以自己自定义配置Okhttp的参数
-// okhttpBuilder.sslSocketFactory(); //支持 Https,详情请百度
+ .okhttpConfiguration((context1, okhttpBuilder) -> {//这里可以自己自定义配置 Okhttp 的参数
+// okhttpBuilder.sslSocketFactory(); //支持 Https, 详情请百度
okhttpBuilder.writeTimeout(10, TimeUnit.SECONDS);
- //使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听 详细使用方法查看 https://github.com/JessYanCoding/ProgressManager
+ //使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听, 详细使用方法请查看 https://github.com/JessYanCoding/ProgressManager
ProgressManager.getInstance().with(okhttpBuilder);
- //让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl. 详细使用请方法查看 https://github.com/JessYanCoding/RetrofitUrlManager
+ //让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl, 详细使用方法请查看 https://github.com/JessYanCoding/RetrofitUrlManager
RetrofitUrlManager.getInstance().with(okhttpBuilder);
})
.rxCacheConfiguration((context1, rxCacheBuilder) -> {//这里可以自己自定义配置 RxCache 的参数
rxCacheBuilder.useExpiredDataIfLoaderNotAvailable(true);
- // 想自定义 RxCache 的缓存文件夹或者解析方式, 如改成 fastjson, 请 return rxCacheBuilder.persistence(cacheDirectory, new FastJsonSpeaker());
- // 否则请 return null;
+ //想自定义 RxCache 的缓存文件夹或者解析方式, 如改成 FastJson, 请 return rxCacheBuilder.persistence(cacheDirectory, new FastJsonSpeaker());
+ //否则请 return null;
return null;
});
}
@Override
- public void injectAppLifecycle(Context context, List lifecycles) {
- // AppLifecycles 的所有方法都会在基类 Application 的对应的生命周期中被调用,所以在对应的方法中可以扩展一些自己需要的逻辑
- // 可以根据不同的逻辑添加多个实现类
+ public void injectAppLifecycle(@NonNull Context context, @NonNull List lifecycles) {
+ //AppLifecycles 中的所有方法都会在基类 Application 的对应生命周期中被调用, 所以在对应的方法中可以扩展一些自己需要的逻辑
+ //可以根据不同的逻辑添加多个实现类
lifecycles.add(new AppLifecyclesImpl());
}
@Override
- public void injectActivityLifecycle(Context context, List lifecycles) {
- // ActivityLifecycleCallbacks 的所有方法都会在 Activity (包括三方库) 的对应的生命周期中被调用,所以在对应的方法中可以扩展一些自己需要的逻辑
- // 可以根据不同的逻辑添加多个实现类
+ public void injectActivityLifecycle(@NonNull Context context, @NonNull List lifecycles) {
+ //ActivityLifecycleCallbacks 中的所有方法都会在 Activity (包括三方库) 的对应生命周期中被调用, 所以在对应的方法中可以扩展一些自己需要的逻辑
+ //可以根据不同的逻辑添加多个实现类
lifecycles.add(new ActivityLifecycleCallbacksImpl());
}
@Override
- public void injectFragmentLifecycle(Context context, List lifecycles) {
+ public void injectFragmentLifecycle(@NonNull Context context, @NonNull List lifecycles) {
+ //FragmentLifecycleCallbacks 中的所有方法都会在 Fragment (包括三方库) 的对应生命周期中被调用, 所以在对应的方法中可以扩展一些自己需要的逻辑
+ //可以根据不同的逻辑添加多个实现类
lifecycles.add(new FragmentLifecycleCallbacksImpl());
}
-
}
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalHttpHandlerImpl.java b/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalHttpHandlerImpl.java
index 3ba890a8d..a7e20c38c 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalHttpHandlerImpl.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/app/GlobalHttpHandlerImpl.java
@@ -16,6 +16,8 @@
package me.jessyan.mvparms.demo.app;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.google.gson.reflect.TypeToken;
@@ -52,12 +54,13 @@ public GlobalHttpHandlerImpl(Context context) {
* 重新请求 token, 并重新执行请求
*
* @param httpResult 服务器返回的结果 (已被框架自动转换为字符串)
- * @param chain {@link okhttp3.Interceptor.Chain}
- * @param response {@link Response}
- * @return
+ * @param chain {@link okhttp3.Interceptor.Chain}
+ * @param response {@link Response}
+ * @return {@link Response}
*/
+ @NonNull
@Override
- public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {
+ public Response onHttpResultResponse(@Nullable String httpResult, @NonNull Interceptor.Chain chain, @NonNull Response response) {
if (!TextUtils.isEmpty(httpResult) && RequestInterceptor.isJson(response.body().contentType())) {
try {
List list = ArmsUtils.obtainAppComponentFromContext(context).gson().fromJson(httpResult, new TypeToken>() {
@@ -87,13 +90,14 @@ public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain,
/**
* 这里可以在请求服务器之前拿到 {@link Request}, 做一些操作比如给 {@link Request} 统一添加 token 或者 header 以及参数加密等操作
*
- * @param chain {@link okhttp3.Interceptor.Chain}
+ * @param chain {@link okhttp3.Interceptor.Chain}
* @param request {@link Request}
- * @return
+ * @return {@link Request}
*/
+ @NonNull
@Override
- public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) {
- /* 如果需要再请求服务器之前做一些操作, 则重新返回一个做过操作的的 Request 如增加 Header, 不做操作则直接返回参数 request
+ public Request onHttpRequestBefore(@NonNull Interceptor.Chain chain, @NonNull Request request) {
+ /* 如果需要在请求服务器之前做一些操作, 则重新构建一个做过操作的 Request 并 return, 如增加 Header、Params 等请求信息, 不做操作则直接返回参数 request
return chain.request().newBuilder().header("token", tokenId)
.build(); */
return request;
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java b/demo/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java
index e4a888118..629492953 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/di/component/UserComponent.java
@@ -18,8 +18,10 @@
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.di.scope.ActivityScope;
+import dagger.BindsInstance;
import dagger.Component;
import me.jessyan.mvparms.demo.di.module.UserModule;
+import me.jessyan.mvparms.demo.mvp.contract.UserContract;
import me.jessyan.mvparms.demo.mvp.ui.activity.UserActivity;
/**
@@ -36,4 +38,11 @@
@Component(modules = UserModule.class, dependencies = AppComponent.class)
public interface UserComponent {
void inject(UserActivity activity);
+ @Component.Builder
+ interface Builder {
+ @BindsInstance
+ UserComponent.Builder view(UserContract.View view);
+ UserComponent.Builder appComponent(AppComponent appComponent);
+ UserComponent build();
+ }
}
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java b/demo/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java
index 896f9c900..0543a4b89 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/di/module/UserModule.java
@@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.List;
+import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import me.jessyan.mvparms.demo.mvp.contract.UserContract;
@@ -43,51 +44,32 @@
* ================================================
*/
@Module
-public class UserModule {
- private UserContract.View view;
+public abstract class UserModule {
- /**
- * 构建 UserModule 时,将 View 的实现类传进来,这样就可以提供 View 的实现类给 Presenter
- *
- * @param view
- */
- public UserModule(UserContract.View view) {
- this.view = view;
- }
-
- @ActivityScope
- @Provides
- UserContract.View provideUserView() {
- return this.view;
- }
-
- @ActivityScope
- @Provides
- UserContract.Model provideUserModel(UserModel model) {
- return model;
- }
+ @Binds
+ abstract UserContract.Model bindUserModel(UserModel model);
@ActivityScope
@Provides
- RxPermissions provideRxPermissions() {
+ static RxPermissions provideRxPermissions(UserContract.View view) {
return new RxPermissions((FragmentActivity) view.getActivity());
}
@ActivityScope
@Provides
- RecyclerView.LayoutManager provideLayoutManager() {
+ static RecyclerView.LayoutManager provideLayoutManager(UserContract.View view) {
return new GridLayoutManager(view.getActivity(), 2);
}
@ActivityScope
@Provides
- List provideUserList() {
+ static List provideUserList() {
return new ArrayList<>();
}
@ActivityScope
@Provides
- RecyclerView.Adapter provideUserAdapter(List list){
+ static RecyclerView.Adapter provideUserAdapter(List list){
return new UserAdapter(list);
}
}
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
index faee3c507..8c9b898a2 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
@@ -21,19 +21,15 @@
import android.support.v4.app.Fragment;
import android.support.v4.app.SupportActivity;
import android.support.v7.widget.RecyclerView;
-
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.PermissionUtil;
import com.jess.arms.utils.RxLifecycleUtils;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
+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.rxerrorhandler.core.RxErrorHandler;
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
index 40d104584..092984634 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
@@ -35,7 +35,6 @@
import butterknife.BindView;
import me.jessyan.mvparms.demo.R;
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 timber.log.Timber;
@@ -74,7 +73,7 @@ public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerUserComponent
.builder()
.appComponent(appComponent)
- .userModule(new UserModule(this))
+ .view(this)
.build()
.inject(this);
}
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java
index 21810ec85..9015cc045 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/adapter/UserAdapter.java
@@ -15,6 +15,7 @@
*/
package me.jessyan.mvparms.demo.mvp.ui.adapter;
+import android.support.annotation.NonNull;
import android.view.View;
import com.jess.arms.base.BaseHolder;
@@ -36,12 +37,14 @@
* ================================================
*/
public class UserAdapter extends DefaultAdapter {
+
public UserAdapter(List infos) {
super(infos);
}
+ @NonNull
@Override
- public BaseHolder getHolder(View v, int viewType) {
+ public BaseHolder getHolder(@NonNull View v, int viewType) {
return new UserItemHolder(v);
}
diff --git a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java
index bc8140b0b..81dadc1d5 100644
--- a/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java
+++ b/demo/src/main/java/me/jessyan/mvparms/demo/mvp/ui/holder/UserItemHolder.java
@@ -15,6 +15,7 @@
*/
package me.jessyan.mvparms.demo.mvp.ui.holder;
+import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
@@ -28,7 +29,6 @@
import com.jess.arms.utils.ArmsUtils;
import butterknife.BindView;
-import io.reactivex.Observable;
import me.jessyan.mvparms.demo.R;
import me.jessyan.mvparms.demo.mvp.model.entity.User;
@@ -48,19 +48,21 @@ public class UserItemHolder extends BaseHolder {
@BindView(R.id.tv_name)
TextView mName;
private AppComponent mAppComponent;
- private ImageLoader mImageLoader;//用于加载图片的管理类,默认使用 Glide,使用策略模式,可替换框架
+ /**
+ * 用于加载图片的管理类, 默认使用 Glide, 使用策略模式, 可替换框架
+ */
+ private ImageLoader mImageLoader;
public UserItemHolder(View itemView) {
super(itemView);
- //可以在任何可以拿到 Context 的地方,拿到 AppComponent,从而得到用 Dagger 管理的单例对象
+ //可以在任何可以拿到 Context 的地方, 拿到 AppComponent, 从而得到用 Dagger 管理的单例对象
mAppComponent = ArmsUtils.obtainAppComponentFromContext(itemView.getContext());
mImageLoader = mAppComponent.imageLoader();
}
@Override
- public void setData(User data, int position) {
- Observable.just(data.getLogin())
- .subscribe(s -> mName.setText(s));
+ public void setData(@NonNull User data, int position) {
+ mName.setText(data.getLogin());
//itemView 的 Context 就是 Activity, Glide 会自动处理并和该 Activity 的生命周期绑定
mImageLoader.loadImage(itemView.getContext(),
@@ -71,7 +73,6 @@ public void setData(User data, int position) {
.build());
}
-
/**
* 在 Activity 的 onDestroy 中使用 {@link DefaultAdapter#releaseAllHolder(RecyclerView)} 方法 (super.onDestroy() 之前)
* {@link BaseHolder#onRelease()} 才会被调用, 可以在此方法中释放一些资源
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8c59bf4e8..2601058c8 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Sep 26 09:42:46 CST 2018
+#Mon Jul 08 16:45:50 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
diff --git a/image/official.jpeg b/image/official.jpeg
new file mode 100644
index 000000000..82f9d253a
Binary files /dev/null and b/image/official.jpeg differ
diff --git a/image/tianfutong_logo.png b/image/tianfutong_logo.png
new file mode 100644
index 000000000..b54f49d40
Binary files /dev/null and b/image/tianfutong_logo.png differ