fragment懒加载
protected View mView;
//页面是否可见
protected boolean isViewInitiated;
//页面是否加载过
protected boolean isVisibleToUser;
//是不是加载过
protected boolean isDataInitiated;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mView == null) {
mView = createContenView(container);
}
return mView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (!isViewInitiated) {
initView(mView);
mPresenter = initPresenter();
mPresenter.onStart(this);
}
isViewInitiated = true;
initData();
}
//设置用户可见提示
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
initData();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mPresenter != null) {
mPresenter.onEnd();
mPresenter = null;
}
if (mView != null) {
mView = null;
}
}
//初始化数据
protected void initData() {
if (isViewInitiated && isVisibleToUser && (!isDataInitiated)) {
isDataInitiated = true;
lazyLoad();
}
}
//延迟加载
protected abstract void lazyLoad();
//初始化P层
protected abstract P initPresenter();
//初始化视图
protected abstract void initView(View mView);
//创建内容视图
protected View createContenView(ViewGroup container) {
Object layout = getContextLayout();
View contentView = null;
if (layout instanceof View) {
contentView = (View) layout;
} else if (layout instanceof Integer) {
contentView = getLayoutInflater().inflate((Integer) layout, container, false);
}
return contentView;
}
//获取布局
protected abstract Object getContextLayout();
NetUtil
private ApiService apiService;
private NetNtil() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
SharedPreferences zzz = MyApp.context.getSharedPreferences("ZZZ", Context.MODE_PRIVATE);
String userId = zzz.getString("userId", "");
String senssionId = zzz.getString("senssionId", "");
if (TextUtils.isEmpty(userId) && TextUtils.isEmpty(senssionId)) {
return chain.proceed(chain.request());
} else {
Request build = chain.request().newBuilder()
.addHeader("userId", userId)
.addHeader("sessionId", senssionId)
.build();
return chain.proceed(build);
}
}
}).build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BaseUrl.Http)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
apiService = retrofit.create(ApiService.class);
}
private static class NetUtils {
private static NetNtil netNtil = new NetNtil();
}
public static NetNtil getInstance() {
return NetUtils.netNtil;
}
public interface Shared<T> {
void Success(T t);
void Filed(String error);
}
@SuppressLint("CheckResult")
public void doGet(String url, Map<String, Object> map, Class cla, Shared shared) {
apiService.GetInfo(url, map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
Gson gson = new Gson();
Object o = gson.fromJson(responseBody.string(), cla);
if (shared != null) {
shared.Success(o);
}
}
});
}
@SuppressLint("CheckResult")
public void doPoost(String url, Map<String, Object> map, Class cla, Shared shared) {
apiService.PostInfo(url, map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
Gson gson = new Gson();
Object o = gson.fromJson(responseBody.string(), cla);
if (shared != null) {
shared.Success(o);
}
}
});
}