提交 57eb2978 编写于 作者: 门心叼龙's avatar 门心叼龙

Network request implementation

上级 68973a79
......@@ -35,7 +35,7 @@
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -36,6 +36,7 @@ android {
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
api project(":lib_refresh_layout")
api project(':lib_fly_api')
api project(':lib_fly_db')
api deps.junit
api deps.testrunner
......
......@@ -9,11 +9,6 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
buildConfigField "String", "FLYHEADER_API_KEY", '"1da11d91-7ade-4da1-855d-24adfe39d173"'
buildConfigField "String", "FLYHEADER_CORPID", '"1001"' // 企业编号(corpid)
buildConfigField "String", "FLYHEADER_VERSION", '"1.0"' // API协议版本号
buildConfigField "String", "FLYHEADER_PRODOCT_ID", '"1020"' // 产品编号
buildConfigField "String", "URL_HOST", '"https://192.168.31.105/"'
}
buildTypes {
......
package com.fly.tour.api;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.user.LoginDTO;
import io.reactivex.Observable;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface CommonService {
@POST("/user/login")
Observable<RespDTO<LoginDTO>> login(@Query("username") String name, @Query("password") String pwd);
}
package com.fly.tour.api;
import com.fly.tour.api.config.API;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import java.util.List;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
public interface NewsDetailService {
@POST(API.URL_HOST_NEWS + "/newsdetail/query/all")
Observable<RespDTO<List<NewsDetail>>> getListNewsDetailByType(@Header("Authorization") String tolen, @Query("typid") int typeid);
@GET(API.URL_HOST_NEWS + "/newsdetail/{id}/detail")
Observable<RespDTO<NewsDetail>> getNewsDetailById(@Header("Authorization") String tolen, @Path("id") int id);
@POST(API.URL_HOST_NEWS + "/newsdetail/save")
Observable<RespDTO<NewsDetail>> addNewsDetail(@Header("Authorization") String tolen, @Body NewsDetail newsDetail);
}
package com.fly.tour.api;
import com.fly.tour.api.config.API;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import java.util.List;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Path;
public interface NewsTypeService {
@POST(API.URL_HOST_NEWS + "/newstype/query/all")
Observable<RespDTO<List<NewsType>>> getListNewsType(@Header("Authorization") String tolen);
@GET(API.URL_HOST_NEWS + "/newstype/{id}/delete")
Observable<RespDTO> deleteNewsTypeById(@Header("Authorization") String tolen, @Path("id") int id);
@POST(API.URL_HOST_NEWS + "/newstype/save")
Observable<RespDTO<NewsType>> addNewsType(@Header("Authorization") String tolen, @Body NewsType type);
}
package com.fly.tour.api;
import android.app.Application;
import android.content.Context;
import com.fly.tour.api.config.API;
import com.fly.tour.api.util.SSLContextUtil;
import java.io.IOException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Description: <RetrofitManager><br>
* Author: gxl<br>
* Date: 2019/6/22<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class RetrofitManager {
public static RetrofitManager retrofitManager;
public static Context mContext;
private Retrofit mRetrofit;
public String TOKEN;
OkHttpClient.Builder okHttpBuilder;
private RetrofitManager() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpBuilder = new OkHttpClient.Builder();
okHttpBuilder.interceptors().add(logging);
SSLContext sslContext = SSLContextUtil.getDefaultSLLContext();
if (sslContext != null) {
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
okHttpBuilder.sslSocketFactory(socketFactory);
}
okHttpBuilder.hostnameVerifier(SSLContextUtil.HOSTNAME_VERIFIER);
mRetrofit = new Retrofit.Builder().client(okHttpBuilder.build()).baseUrl(API.URL_HOST_USER).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();
}
public static void init(Application application) {
mContext = application;
}
public static RetrofitManager getInstance() {
if (retrofitManager == null) {
synchronized (RetrofitManager.class) {
if (retrofitManager == null) {
retrofitManager = new RetrofitManager();
}
}
}
return retrofitManager;
}
/**
* 创建一个公共服务
*
* @return
*/
public CommonService getCommonService() {
return mRetrofit.create(CommonService.class);
}
/**
* 创建一个新闻类型服务
*
* @return
*/
public NewsTypeService getNewsTypeService() {
return mRetrofit.create(NewsTypeService.class);
}
/**
* 创建一个新闻详情服务
*
* @return
*/
public NewsDetailService getNewsDetailService() {
return mRetrofit.create(NewsDetailService.class);
}
public void addToken(final String token) {
if (okHttpBuilder != null)
okHttpBuilder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.header("Authorization", "Bearer " + token);
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
}
}
\ No newline at end of file
package com.fly.tour.api.config;
/**
* Description: <API><br>
* Author: gxl<br>
* Date: 2019/6/23<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class API {
public static final String URL_HOST_USER = "http://192.168.31.105:8762";
public static final String URL_HOST_NEWS = "http://192.168.31.105:8767";
}
package com.fly.tour.api.dto;
import com.google.gson.Gson;
import com.google.gson.internal.$Gson$Types;
import java.io.Serializable;
import java.lang.reflect.Type;
/**
* Description: <RespDTO><br>
* Author:    gxl<br>
* Date:     2019/2/19<br>
* Version:   V1.0.0<br>
* Update:     <br>
*/
public class RespDTO<T> implements Serializable{
public int code ;
public String error = "";
public T data;
@Override
public String toString() {
return "RespDTO{" +
"code=" + code +
", error='" + error + '\'' +
", data=" + data +
'}';
}
public void setCode(int code) {
this.code = code;
}
public void setError(String error) {
this.error = error;
}
}
package com.fly.tour.api.http;
import android.net.ParseException;
import android.widget.Toast;
import com.fly.tour.api.RetrofitManager;
import com.google.gson.JsonParseException;
import com.google.gson.stream.MalformedJsonException;
import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import java.net.ConnectException;
import retrofit2.HttpException;
/**
* Description: <ExceptionHandler><br>
* Author: gxl<br>
* Date: 2019/3/18<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class ExceptionHandler {
public static ResponseThrowable handleException(Throwable e) {
ResponseThrowable ex;
if (e instanceof HttpException) {
HttpException httpException = (HttpException) e;
ex = new ResponseThrowable(e, SYSTEM_ERROR.HTTP_ERROR);
switch (httpException.code()) {
case SYSTEM_ERROR.UNAUTHORIZED:
ex.message = "操作未授权";
ex.code = SYSTEM_ERROR.UNAUTHORIZED;
Toast.makeText(RetrofitManager.mContext,"您的登录已失效,请重新登录",Toast.LENGTH_SHORT).show();
break;
case SYSTEM_ERROR.FORBIDDEN:
ex.message = "请求被拒绝";
break;
case SYSTEM_ERROR.NOT_FOUND:
ex.message = "资源不存在";
break;
case SYSTEM_ERROR.REQUEST_TIMEOUT:
ex.message = "服务器执行超时";
break;
case SYSTEM_ERROR.INTERNAL_SERVER_ERROR:
ex.message = "服务器内部错误";
break;
case SYSTEM_ERROR.SERVICE_UNAVAILABLE:
ex.message = "服务器不可用";
break;
default:
ex.message = "网络错误";
break;
}
return ex;
} else if (e instanceof JsonParseException || e instanceof JSONException || e instanceof ParseException || e instanceof MalformedJsonException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.PARSE_ERROR);
ex.message = "解析错误";
return ex;
} else if (e instanceof ConnectException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.NETWORD_ERROR);
ex.message = "连接失败";
return ex;
} else if (e instanceof javax.net.ssl.SSLException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.SSL_ERROR);
ex.message = "证书验证失败";
return ex;
} else if (e instanceof ConnectTimeoutException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.TIMEOUT_ERROR);
ex.message = "连接超时";
return ex;
} else if (e instanceof java.net.SocketTimeoutException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.TIMEOUT_ERROR);
ex.message = "连接超时";
return ex;
} else if (e instanceof java.net.UnknownHostException) {
ex = new ResponseThrowable(e, SYSTEM_ERROR.TIMEOUT_ERROR);
ex.message = "主机地址未知";
return ex;
} else {
ex = new ResponseThrowable(e, SYSTEM_ERROR.UNKNOWN);
ex.message = "未知错误";
return ex;
}
}
public class SYSTEM_ERROR {
public static final int UNAUTHORIZED = 401;
public static final int FORBIDDEN = 403;
public static final int NOT_FOUND = 404;
public static final int REQUEST_TIMEOUT = 408;
public static final int INTERNAL_SERVER_ERROR = 500;
public static final int SERVICE_UNAVAILABLE = 503;
/**
* 未知错误
*/
public static final int UNKNOWN = 1000;
/**
* 解析错误
*/
public static final int PARSE_ERROR = 1001;
/**
SSL_ERROR * 网络错误
*/
public static final int NETWORD_ERROR = 1002;
/**
* 协议出错
*/
public static final int HTTP_ERROR = 1003;
/**
* 证书出错
*/
public static final int SSL_ERROR = 1005;
/**
* 连接超时
*/
public static final int TIMEOUT_ERROR = 1006;
}
public interface APP_ERROR {
public static final int SUCC = 0;// 处理成功,无错误
public static final int INTERFACE_PROCESSING_TIMEOUT = 1;// 接口处理超时
public static final int INTERFACE_INTERNAL_ERROR = 2;// 接口内部错误
public static final int PARAMETERS_EMPTY = 3;// 必需的参数为空
public static final int AUTHENTICATION_FAILED = 4;// 鉴权失败,用户没有使用该项功能(服务)的权限。
public static final int PARAMETERS_ERROR = 5;// 参数错误
/**
* 企业激活码无效
*/
int CODE_ACTIVECODE_INVALIDATE = 100201;
/**
* 激活码已被激活
*/
int CODE_ACTIVECODE_ACTIVED = 100202;
/**
* 用户不存在
*/
int CODE_USER_NOT_EXIST = 110401;
/**
* 用户被禁用
*/
int CODE_USER_DISABLE = 110203;
/**
* 盒子号无效
*/
int INVALIDATE_BOX_CODE = 110907;
/**
* 盒子号已绑定在当前企业下的其他车辆上
*/
int BOX_BINDED_VEHICLE = 110908;
/**
* 验证码无效
*/
int AUTH_CODE_INVALIDATE = 110801;
/**
* 企业可绑定盒子已达上限,请联系客服,升级权限
*/
int BIND_BOX_LIMIT = 110802;
/**
* 授权车辆不允许修改此信息。
*/
int VHEICLE_NOT_EDIT_CODE = 110904;
}
}
package com.fly.tour.api.http;
/**
* Description: <ResponseThrowable><br>
* Author: gxl<br>
* Date: 2019/3/18<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class ResponseThrowable extends Exception {
public int code;
public String message;
public ResponseThrowable(Throwable throwable, int code) {
super(throwable);
this.code = code;
}
}
package com.fly.tour.api.http;
import android.widget.Toast;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.trello.rxlifecycle2.LifecycleProvider;
import com.trello.rxlifecycle2.LifecycleTransformer;
import com.trello.rxlifecycle2.android.ActivityEvent;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.Single;
import io.reactivex.SingleSource;
import io.reactivex.SingleTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
/**
* Description: <Rx适配器><br>
* Author: gxl<br>
* Date: 2019/3/18<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class RxAdapter {
/**
* 生命周期绑定
*
* @param lifecycle Activity
*/
public static <T> LifecycleTransformer<T> bindUntilEvent(@NonNull LifecycleProvider lifecycle) {
if (lifecycle != null) {
return lifecycle.bindUntilEvent(ActivityEvent.DESTROY);
} else {
throw new IllegalArgumentException("context not the LifecycleProvider type");
}
}
/**
* 线程调度器
*/
public static SingleTransformer singleSchedulersTransformer() {
return new SingleTransformer() {
@Override
public SingleSource apply(Single upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
public static SingleTransformer singleExceptionTransformer() {
return new SingleTransformer() {
@Override
public SingleSource apply(Single observable) {
return observable
.map(new HandleFuc()) //这里可以取出BaseResponse中的Result
.onErrorResumeNext(new HttpResponseFunc());
}
};
}
/**
* 线程调度器
*/
public static ObservableTransformer schedulersTransformer() {
return new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
public static ObservableTransformer exceptionTransformer() {
return new ObservableTransformer() {
@Override
public ObservableSource apply(Observable observable) {
return observable
.map(new HandleFuc()) //这里可以取出BaseResponse中的Result
.onErrorResumeNext(new HttpResponseFunc());
}
};
}
private static class HttpResponseFunc<T> implements Function<Throwable, Observable<T>> {
@Override
public Observable<T> apply(Throwable t) {
ResponseThrowable exception = ExceptionHandler.handleException(t);
if(exception.code == ExceptionHandler.SYSTEM_ERROR.TIMEOUT_ERROR ){
Toast.makeText(RetrofitManager.mContext,"网络不给力哦!",Toast.LENGTH_SHORT).show();
}
return Observable.error(exception);
}
}
private static class HandleFuc implements Function<Object,Object> {
@Override
public Object apply(Object o) throws Exception {
if(o instanceof RespDTO){
RespDTO respDTO = (RespDTO) o;
if(respDTO.code != ExceptionHandler.APP_ERROR.SUCC){
Toast.makeText(RetrofitManager.mContext,respDTO.error,Toast.LENGTH_SHORT).show();
}
}
return o;
}
}
}
package com.fly.tour.api.news.entity;
/**
* Description: <NewsDetail><br>
* Author: gxl<br>
* Date: 2019/5/27<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class NewsDetail {
public int id;
public int typeid;
public String title;
public String content;
public String addtime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getTypeid() {
return typeid;
}
public void setTypeid(int typeid) {
this.typeid = typeid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getAddtime() {
return addtime;
}
public void setAddtime(String addtime) {
this.addtime = addtime;
}
}
package com.fly.tour.api.newstype.entity;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Date;
/**
* Description: <NewsType><br>
* Author: gxl<br>
* Date: 2019/5/27<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class NewsType implements Parcelable {
public Integer id;
public String typename;
public String addtime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
public String getAddtime() {
return addtime;
}
public void setAddtime(String addtime) {
this.addtime = addtime;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.id);
dest.writeString(this.typename);
dest.writeString(this.addtime);
}
public NewsType() {
}
protected NewsType(Parcel in) {
this.id = (Integer) in.readValue(Integer.class.getClassLoader());
this.typename = in.readString();
this.addtime = in.readString();
}
public static final Creator<NewsType> CREATOR = new Creator<NewsType>() {
@Override
public NewsType createFromParcel(Parcel source) {
return new NewsType(source);
}
@Override
public NewsType[] newArray(int size) {
return new NewsType[size];
}
};
}
package com.fly.tour.api.user;
import com.fly.tour.api.user.entity.User;
/**
* Description: <LoginDTO><br>
* Author:    门心叼龙<br>
* Date:     2019/2/19<br>
* Version:   V1.0.0<br>
* Update:     <br>
*/
public class LoginDTO {
private User user;
private String token;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
package com.fly.tour.api.user.entity;
import java.io.Serializable;
/**
* Description: <User><br>
* Author:    门心叼龙<br>
* Date:     2019/2/19<br>
* Version:   V1.0.0<br>
* Update:     <br>
*/
public class User implements Serializable {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
/*
* Copyright 2015 Yan Zhenjie
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.fly.tour.api.util;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
* https 证书工具
*
* @author Yan Zhenjie.
*/
public class SSLContextUtil {
/**
* 如果不需要https证书.(NoHttp已经修补了系统的SecureRandom的bug)。
*/
public static SSLContext getDefaultSLLContext() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] {trustManagers}, new SecureRandom());
} catch (Exception e) {
e.printStackTrace();
}
return sslContext;
}
/**
* 信任管理器
*/
private static TrustManager trustManagers = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
/**
* 域名验证
*/
public static final HostnameVerifier HOSTNAME_VERIFIER = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
}
......@@ -10,7 +10,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".MyApplication"
>
android:usesCleartextTraffic="true">
</application>
......
package com.fly.tour;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.common.BaseApplication;
import com.fly.tour.common.manager.NewsDBManager;
......@@ -14,6 +15,7 @@ public class MyApplication extends BaseApplication {
@Override
public void onCreate() {
super.onCreate();
NewsDBManager.getInstance(this).initNewsDB();
//NewsDBManager.getInstance(this).initNewsDB();
RetrofitManager.init(this);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
......@@ -10,14 +10,13 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
</activity>
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SplashActivity">
</activity>
</application>
</manifest>
\ No newline at end of file
package com.fly.tour.main;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
public class SplashActivity extends AppCompatActivity {
import com.fly.tour.common.base.BaseMvpActivity;
import com.fly.tour.main.contract.SplashContract;
import com.fly.tour.main.inject.component.DaggerSplashComponent;
import com.fly.tour.main.inject.module.SplashModule;
import com.fly.tour.main.model.SplashModel;
import com.fly.tour.main.presenter.SplashPresenter;
/**
* Description: <SplashActivity><br>
* Author: gxl<br>
* Date: 2019/6/22<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class SplashActivity extends BaseMvpActivity<SplashModel, SplashContract.View, SplashPresenter> implements SplashContract.View {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
public void injectPresenter() {
DaggerSplashComponent.builder().splashModule(new SplashModule(this)).build().inject(this);
}
}
@Override
public int onBindLayout() {
return R.layout.activity_splash;
}
@Override
public void initView() {
}
@Override
public void initData() {
mPresenter.login();
}
@Override
public void startMainActivity() {
startActivity(new Intent(this, MainActivity.class));
finish();
}
}
\ No newline at end of file
package com.fly.tour.main.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.user.LoginDTO;
import com.fly.tour.common.mvp.BaseView;
import io.reactivex.Observable;
/**
* Description: <SplashContract><br>
* Author: gxl<br>
* Date: 2019/6/22<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public interface SplashContract {
interface Presenter{
void login();
}
interface View extends BaseView {
void startMainActivity();
}
interface Model{
Observable<RespDTO<LoginDTO>> login(String username, String password);
}
}
\ No newline at end of file
package com.fly.tour.main.inject.component;
import com.fly.tour.main.SplashActivity;
import com.fly.tour.main.inject.module.SplashModule;
import dagger.Component;
/**
* Description: <SplashComponent><br>
* Author: gxl<br>
* Date: 2019/5/31<br>
* Version: V1.0.0<br>
* Update: <br>
*/
@Component(modules = {SplashModule.class})
public interface SplashComponent {
void inject(SplashActivity activity);
}
package com.fly.tour.main.inject.module;
import android.content.Context;
import com.fly.tour.main.contract.SplashContract;
import dagger.Module;
import dagger.Provides;
/**
* Description: <NewsDetailModule><br>
* Author: gxl<br>
* Date: 2019/5/31<br>
* Version: V1.0.0<br>
* Update: <br>
*/
@Module
public class SplashModule {
private SplashContract.View mView;
public SplashModule(SplashContract.View view) {
this.mView = view;
}
@Provides
public Context providerContext(){
return mView.getContext();
}
@Provides
public SplashContract.View providerNewsDetailView(){
return mView;
}
}
package com.fly.tour.main.model;
import android.content.Context;
import com.fly.tour.api.CommonService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.user.LoginDTO;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.main.contract.SplashContract;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.functions.Function;
import okhttp3.ResponseBody;
/**
* Description: <SplashModel><br>
* Author: gxl<br>
* Date: 2019/6/22<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class SplashModel extends BaseModel implements SplashContract.Model {
private CommonService mCommonService;
@Inject
public SplashModel(Context context) {
super(context);
mCommonService = RetrofitManager.getInstance().getCommonService();
}
@Override
public Observable<RespDTO<LoginDTO>> login(String username, String password) {
return mCommonService.login(username, password)
.compose(RxAdapter.bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
\ No newline at end of file
package com.fly.tour.main.presenter;
import android.content.Context;
import android.util.Log;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.config.API;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.ExceptionHandler;
import com.fly.tour.api.user.LoginDTO;
import com.fly.tour.common.mvp.BasePresenter;
import com.fly.tour.main.contract.SplashContract;
import com.fly.tour.main.model.SplashModel;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <SplashPresenter><br>
* Author: gxl<br>
* Date: 2019/6/22<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class SplashPresenter extends BasePresenter<SplashModel, SplashContract.View> implements SplashContract.Presenter{
public static String TAG = SplashPresenter.class.getSimpleName();
@Inject
public SplashPresenter(Context context, SplashContract.View view, SplashModel model) {
super(context, view, model);
}
@Override
public void login() {
mModel.login("gxl","123456").subscribe(new Observer<RespDTO<LoginDTO>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(RespDTO<LoginDTO> loginDTORespDTO) {
if(loginDTORespDTO.code == ExceptionHandler.APP_ERROR.SUCC){
Log.v(TAG,"tolen:"+loginDTORespDTO.data.getToken());
RetrofitManager.getInstance().TOKEN = "Bearer "+loginDTORespDTO.data.getToken();
}else{
Log.v(TAG,"error:"+loginDTORespDTO.error);
}
}
@Override
public void onError(Throwable e) {
mView.startMainActivity();
}
@Override
public void onComplete() {
mView.startMainActivity();
}
});
}
}
\ No newline at end of file
......@@ -9,9 +9,11 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
</activity>
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
......
......@@ -5,11 +5,11 @@ import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.common.base.BaseMvpActivity;
import com.fly.tour.common.util.ToastUtil;
import com.fly.tour.common.view.SettingBarView;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.contract.NewsDetailAddContract;
import com.fly.tour.me.inject.component.DaggerNewsDetailAddComponent;
import com.fly.tour.me.inject.module.NewsDetailAddModule;
......@@ -17,6 +17,8 @@ import com.fly.tour.me.model.NewsDetailAddModel;
import com.fly.tour.me.presenter.NewsDetailAddPresenter;
import com.fly.tour.me.view.NewsTypeBottomSelectDialog;
import java.util.List;
public class NewsDetailAddActivity extends BaseMvpActivity<NewsDetailAddModel,NewsDetailAddContract.View,NewsDetailAddPresenter> implements NewsDetailAddContract.View {
private SettingBarView mViewSetNewsType;
......@@ -47,15 +49,7 @@ public class NewsDetailAddActivity extends BaseMvpActivity<NewsDetailAddModel,Ne
mViewSetNewsType.setOnClickSettingBarViewListener(new SettingBarView.OnClickSettingBarViewListener() {
@Override
public void onClick() {
NewsTypeBottomSelectDialog newsTypeBottomSelectDialog = NewsTypeBottomSelectDialog.newInstance();
newsTypeBottomSelectDialog.setItemClickListener(new BaseAdapter.OnItemClickListener<NewsType>() {
@Override
public void onItemClick(NewsType newsType, int position) {
mNewsType = newsType;
mViewSetNewsType.setContent(newsType.getTypename());
}
});
newsTypeBottomSelectDialog.show(getSupportFragmentManager(),"dialog");
mPresenter.getListNewsType();
}
});
mBtnSaveNewsConent.setOnClickListener(new View.OnClickListener(){
......@@ -89,4 +83,16 @@ public class NewsDetailAddActivity extends BaseMvpActivity<NewsDetailAddModel,Ne
DaggerNewsDetailAddComponent.builder().newsDetailAddModule(new NewsDetailAddModule(this)).build().inject(this);
}
@Override
public void showNewsType(List<NewsType> typeList) {
NewsTypeBottomSelectDialog newsTypeBottomSelectDialog = NewsTypeBottomSelectDialog.newInstance(typeList);
newsTypeBottomSelectDialog.setItemClickListener(new BaseAdapter.OnItemClickListener<NewsType>() {
@Override
public void onItemClick(NewsType newsType, int position) {
mNewsType = newsType;
mViewSetNewsType.setContent(newsType.getTypename());
}
});
newsTypeBottomSelectDialog.show(getSupportFragmentManager(),"dialog");
}
}
......@@ -9,11 +9,11 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseRefreshActivity;
import com.fly.tour.common.event.RequestCode;
import com.fly.tour.common.util.ToastUtil;
import com.fly.tour.common.view.CommonDialogFragment;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.adapter.NewsTypeShowAdapter;
import com.fly.tour.me.contract.NewsTypeListContract;
import com.fly.tour.me.inject.component.DaggerNewsTypeListComponent;
......@@ -105,7 +105,7 @@ public class NewsTypeListActivity extends BaseRefreshActivity<NewsTypeListModel,
@Override
public void onAutoLoadEvent() {
mPresenter.refreshData();
}
@Override
......
......@@ -4,12 +4,10 @@ import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.common.util.DateUtil;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.R;
/**
......
......@@ -7,9 +7,9 @@ import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.common.util.DateUtil;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.R;
/**
......
package com.fly.tour.me.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseView;
import java.util.List;
import io.reactivex.Observable;
/**
* Description: <NewsDetailAddContract><br>
* Author: gxl<br>
......@@ -12,9 +19,13 @@ import com.fly.tour.common.mvp.BaseView;
public interface NewsDetailAddContract {
interface Presenter{
void addNewsDetail(int type,String title,String content);
void getListNewsType();
}
interface View extends BaseView {
void showNewsType(List<NewsType> typeList);
}
interface View extends BaseView {}
interface Model{
boolean addNewsDetail(int type,String title,String content);
Observable<RespDTO<NewsDetail>> addNewsDetail(int type, String title, String content);
Observable<RespDTO<List<NewsType>>> getNewsType();
}
}
package com.fly.tour.me.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseView;
import io.reactivex.Observable;
/**
* Description: <NewsTypeAddContract><br>
* Author: gxl<br>
......@@ -17,6 +21,6 @@ public interface NewsTypeAddContract {
}
interface Model{
boolean addNewsType(String type);
Observable<RespDTO<NewsType>> addNewsType(NewsType type);
}
}
package com.fly.tour.me.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseRefreshContract;
import com.fly.tour.common.mvp.BaseRefreshView;
import com.fly.tour.db.entity.NewsType;
import java.util.List;
import io.reactivex.Observable;
/**
* Description: <NewsTypeListContract><br>
* Author: gxl<br>
......@@ -21,7 +24,7 @@ public interface NewsTypeListContract {
}
interface Model{
List<NewsType> getListNewsType();
boolean deleteNewsTypeById(int id);
Observable<RespDTO<List<NewsType>>> getListNewsType();
Observable<RespDTO> deleteNewsTypeById(int id);
}
}
......@@ -2,7 +2,7 @@ package com.fly.tour.me.inject.module;
import android.content.Context;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.me.contract.NewsTypeListContract;
import dagger.Module;
......
......@@ -2,12 +2,25 @@ package com.fly.tour.me.model;
import android.content.Context;
import com.fly.tour.api.NewsDetailService;
import com.fly.tour.api.NewsTypeService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.common.util.DateUtil;
import com.fly.tour.db.dao.NewsDetailDao;
import com.fly.tour.me.contract.NewsDetailAddContract;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
/**
* Description: <NewsDetailAddModel><br>
* Author: gxl<br>
......@@ -16,15 +29,33 @@ import javax.inject.Inject;
* Update: <br>
*/
public class NewsDetailAddModel extends BaseModel implements NewsDetailAddContract.Model {
private NewsDetailDao mNewsDetailDao;
private NewsTypeService mNewsTypeService;
private NewsDetailService mNewsDetailService;
@Inject
public NewsDetailAddModel(Context context, NewsDetailDao newsDetailDao) {
super(context);
mNewsDetailDao = newsDetailDao;
mNewsTypeService = RetrofitManager.getInstance().getNewsTypeService();
mNewsDetailService = RetrofitManager.getInstance().getNewsDetailService();
}
@Override
public Observable<RespDTO<NewsDetail>> addNewsDetail(int type, String title, String content) {
NewsDetail newsDetail = new NewsDetail();
newsDetail.setTypeid(type);
newsDetail.setTitle(title);
newsDetail.setContent(content);
newsDetail.setAddtime(DateUtil.formatDate(new Date(), DateUtil.FormatType.yyyyMMddHHmmss));
return mNewsDetailService.addNewsDetail(RetrofitManager.getInstance().TOKEN, newsDetail)
.compose(RxAdapter.<RespDTO<NewsDetail>>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
@Override
public boolean addNewsDetail(int type, String title, String content) {
return mNewsDetailDao.addNewsDetail(type,title,content);
public Observable<RespDTO<List<NewsType>>> getNewsType() {
return mNewsTypeService.getListNewsType(RetrofitManager.getInstance().TOKEN)
.compose(RxAdapter.<RespDTO<List<NewsType>>>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
package com.fly.tour.me.model;
import android.content.Context;
import android.support.annotation.RestrictTo;
import com.fly.tour.api.NewsTypeService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.db.dao.NewsTypeDao;
import com.fly.tour.me.contract.NewsTypeAddContract;
import javax.inject.Inject;
import io.reactivex.Observable;
/**
* Description: <NewsTypeAddModel><br>
* Author: gxl<br>
......@@ -16,15 +24,19 @@ import javax.inject.Inject;
* Update: <br>
*/
public class NewsTypeAddModel extends BaseModel implements NewsTypeAddContract.Model {
private NewsTypeDao mNewsTypeDao;
private NewsTypeService mNewsTypeService;
@Inject
public NewsTypeAddModel(Context context, NewsTypeDao newsTypeDao) {
super(context);
mNewsTypeDao = newsTypeDao;
mNewsTypeService = RetrofitManager.getInstance().getNewsTypeService();
}
@Override
public boolean addNewsType(String type) {
return mNewsTypeDao.addNewsType(type);
public Observable<RespDTO<NewsType>> addNewsType(NewsType type) {
return mNewsTypeService.addNewsType(RetrofitManager.getInstance().TOKEN,type)
.compose(RxAdapter.<RespDTO<NewsType>>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
......@@ -2,15 +2,21 @@ package com.fly.tour.me.model;
import android.content.Context;
import com.fly.tour.api.NewsTypeService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.db.dao.NewsTypeDao;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.contract.NewsTypeListContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
/**
* Description: <NewsTypeListModel><br>
* Author: gxl<br>
......@@ -19,20 +25,27 @@ import javax.inject.Inject;
* Update: <br>
*/
public class NewsTypeListModel extends BaseModel implements NewsTypeListContract.Model {
public NewsTypeDao mNewsTypeDao;
private NewsTypeService mNewsTypeService;
@Inject
public NewsTypeListModel(Context context, NewsTypeDao newsTypeDao) {
public NewsTypeListModel(Context context) {
super(context);
mNewsTypeDao = newsTypeDao;
mNewsTypeService = RetrofitManager.getInstance().getNewsTypeService();
}
@Override
public List<NewsType> getListNewsType() {
return mNewsTypeDao.getListNewsType();
public Observable<RespDTO<List<NewsType>>> getListNewsType() {
return mNewsTypeService.getListNewsType(RetrofitManager.getInstance().TOKEN)
.compose(RxAdapter.<RespDTO<List<NewsType>>>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
@Override
public boolean deleteNewsTypeById(int id) {
return mNewsTypeDao.deleteNewsType(id);
public Observable<RespDTO> deleteNewsTypeById(int id) {
return mNewsTypeService.deleteNewsTypeById(RetrofitManager.getInstance().TOKEN,id)
.compose(RxAdapter.<RespDTO>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
......@@ -3,6 +3,10 @@ package com.fly.tour.me.presenter;
import android.content.Context;
import android.os.Handler;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.ExceptionHandler;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.event.me.NewsDetailCurdEvent;
import com.fly.tour.common.mvp.BasePresenter;
import com.fly.tour.common.util.ToastUtil;
......@@ -11,8 +15,13 @@ import com.fly.tour.me.model.NewsDetailAddModel;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsDetailAddPresenter><br>
* Author: gxl<br>
......@@ -29,22 +38,60 @@ public class NewsDetailAddPresenter extends BasePresenter<NewsDetailAddModel,New
@Override
public void addNewsDetail(final int type, final String title, final String content) {
mView.showTransLoadingView();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
boolean b = mModel.addNewsDetail(type, title, content);
if(b){
ToastUtil.showToast("添加成功");
mView.hideTransLoadingView();
mView.finishActivity();
EventBus.getDefault().post(new NewsDetailCurdEvent(type));
}else{
ToastUtil.showToast("添加失败");
mModel.addNewsDetail(type,title,content)
.subscribe(new Observer<RespDTO<NewsDetail>>() {
@Override
public void onSubscribe(Disposable d) {
mView.showTransLoadingView();
}
@Override
public void onNext(RespDTO<NewsDetail> newsDetailRespDTO) {
if(newsDetailRespDTO.code == ExceptionHandler.APP_ERROR.SUCC){
ToastUtil.showToast("添加成功");
mView.hideTransLoadingView();
mView.finishActivity();
EventBus.getDefault().post(new NewsDetailCurdEvent(type));
}else{
ToastUtil.showToast("添加失败");
}
}
@Override
public void onError(Throwable e) {
mView.hideInitLoadView();
}
@Override
public void onComplete() {
mView.hideInitLoadView();
}
});
}
@Override
public void getListNewsType() {
mModel.getNewsType().subscribe(new Observer<RespDTO<List<NewsType>>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(RespDTO<List<NewsType>> listRespDTO) {
mView.showNewsType(listRespDTO.data);
}
}
},1000 * 2);
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
......@@ -2,13 +2,22 @@ package com.fly.tour.me.presenter;
import android.content.Context;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.ExceptionHandler;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BasePresenter;
import com.fly.tour.common.util.DateUtil;
import com.fly.tour.common.util.ToastUtil;
import com.fly.tour.me.contract.NewsTypeAddContract;
import com.fly.tour.me.model.NewsTypeAddModel;
import java.util.Date;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsTypeAddPresenter><br>
* Author: gxl<br>
......@@ -25,12 +34,35 @@ public class NewsTypeAddPresenter extends BasePresenter<NewsTypeAddModel,NewsTyp
@Override
public void addNewsType(String typename) {
boolean b = mModel.addNewsType(typename);
if(b){
ToastUtil.showToast("添加成功");
mView.finishActivity();
}else{
ToastUtil.showToast("添加失败");
}
NewsType newsType = new NewsType();
newsType.setTypename(typename);
newsType.setAddtime(DateUtil.formatDate(new Date(), DateUtil.FormatType.yyyyMMddHHmmss));
mModel.addNewsType(newsType).subscribe(new Observer<RespDTO<NewsType>>() {
@Override
public void onSubscribe(Disposable d) {
mView.showTransLoadingView();
}
@Override
public void onNext(RespDTO<NewsType> newsTypeRespDTO) {
if(newsTypeRespDTO.code == ExceptionHandler.APP_ERROR.SUCC){
ToastUtil.showToast("添加成功");
mView.finishActivity();
}else{
ToastUtil.showToast("添加失败");
}
}
@Override
public void onError(Throwable e) {
mView.hideTransLoadingView();
}
@Override
public void onComplete() {
mView.hideTransLoadingView();
}
});
}
}
......@@ -2,22 +2,23 @@ package com.fly.tour.me.presenter;
import android.content.Context;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.ExceptionHandler;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.event.EventCode;
import com.fly.tour.common.event.me.NewsTypeCrudEvent;
import com.fly.tour.common.mvp.BaseRefreshPresenter;
import com.fly.tour.common.util.ToastUtil;
import com.fly.tour.common.util.log.KLog;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.contract.NewsTypeListContract;
import com.fly.tour.me.model.NewsTypeListModel;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
import java.util.logging.Handler;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsTypeListPresenter><br>
* Author: gxl<br>
......@@ -38,14 +39,16 @@ public class NewsTypeListPresenter extends BaseRefreshPresenter<NewsTypeListMode
mView.hideNoDataView();
if (isfirst) {
mView.showInitLoadView();
}else{
mView.autoLoadData();
}
new android.os.Handler().postDelayed(new Runnable() {
mModel.getListNewsType().subscribe(new Observer<RespDTO<List<NewsType>>>() {
@Override
public void run() {
List<NewsType> listNewsType = mModel.getListNewsType();
KLog.v("MYTAG","listNewsType:"+listNewsType.toString());
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(RespDTO<List<NewsType>> listRespDTO) {
List<NewsType> listNewsType = listRespDTO.data;
if (listNewsType != null && listNewsType.size() > 0) {
mView.refreshData(listNewsType);
}else{
......@@ -58,8 +61,16 @@ public class NewsTypeListPresenter extends BaseRefreshPresenter<NewsTypeListMode
mView.stopRefresh();
}
}
}, 1000 * 2);
@Override
public void onError(Throwable e) {
mView.hideInitLoadView();
}
@Override
public void onComplete() {
}
});
}
@Override
......@@ -69,19 +80,32 @@ public class NewsTypeListPresenter extends BaseRefreshPresenter<NewsTypeListMode
@Override
public void deleteNewsTypeById(final int id) {
mView.showTransLoadingView();
new android.os.Handler().postDelayed(new Runnable() {
mModel.deleteNewsTypeById(id).subscribe(new Observer<RespDTO>() {
@Override
public void onSubscribe(Disposable d) {
mView.showTransLoadingView();
}
@Override
public void run() {
if(mModel.deleteNewsTypeById(id)){
public void onNext(RespDTO respDTO) {
if(respDTO.code == ExceptionHandler.APP_ERROR.SUCC){
ToastUtil.showToast("删除成功");
refreshData();
mView.autoLoadData();
EventBus.getDefault().post(new NewsTypeCrudEvent(EventCode.MeCode.NEWS_TYPE_DELETE));
}else{
ToastUtil.showToast("删除失败");
}
}
@Override
public void onError(Throwable e) {
mView.hideTransLoadingView();
}
@Override
public void onComplete() {
mView.hideTransLoadingView();
}
},1000 * 2);
});
}
}
package com.fly.tour.me.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment;
......@@ -14,14 +16,16 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.common.util.DisplayUtil;
import com.fly.tour.db.dao.NewsTypeDao;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.me.R;
import com.fly.tour.me.adapter.NewsTypeSelectAdapter;
import com.fly.tour.me.model.NewsTypeListModel;
import java.util.ArrayList;
import java.util.List;
/**
* Description: <PhotoSelectDialog><br>
* Author: gxl<br>
......@@ -38,8 +42,12 @@ public class NewsTypeBottomSelectDialog extends BottomSheetDialogFragment {
mItemClickListener = itemClickListener;
}
public static NewsTypeBottomSelectDialog newInstance() {
return new NewsTypeBottomSelectDialog();
public static NewsTypeBottomSelectDialog newInstance(List<NewsType> list) {
NewsTypeBottomSelectDialog newsTypeBottomSelectDialog = new NewsTypeBottomSelectDialog();
Bundle args = new Bundle();
args.putParcelableArrayList("newstype", (ArrayList<? extends Parcelable>) list);
newsTypeBottomSelectDialog.setArguments(args);
return newsTypeBottomSelectDialog;
}
@Override
......@@ -75,7 +83,8 @@ public class NewsTypeBottomSelectDialog extends BottomSheetDialogFragment {
c.drawLine(0,0,0,DisplayUtil.dip2px(1), paint);
}
});
adapter.refresh(new NewsTypeListModel(getContext(),new NewsTypeDao(getContext())).getListNewsType());
adapter.refresh(getArguments().<NewsType>getParcelableArrayList("newstype"));
adapter.setItemClickListener(new BaseAdapter.OnItemClickListener<NewsType>() {
@Override
public void onItemClick(NewsType newsType, int position) {
......
......@@ -4,9 +4,9 @@ import android.content.Context;
import android.content.Intent;
import android.widget.TextView;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.base.BaseMvpActivity;
import com.fly.tour.common.event.KeyCode;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.news.contract.NewsDetailContract;
import com.fly.tour.news.inject.component.DaggerNewsDetailComponent;
import com.fly.tour.news.inject.module.NewsDetailModule;
......@@ -40,8 +40,6 @@ public class NewsDetailActivity extends BaseMvpActivity<NewsDetailModel,NewsDeta
mPresenter.getNewsDetailById(newsid);
}
@Override
public void showNewsDetail(NewsDetail newsDetail) {
mTxtNewsTitle.setText(newsDetail.getTitle());
......@@ -52,4 +50,6 @@ public class NewsDetailActivity extends BaseMvpActivity<NewsDetailModel,NewsDeta
public void injectPresenter() {
DaggerNewsDetailComponent.builder().newsDetailModule(new NewsDetailModule(this)).build().inject(this);
}
}
......@@ -6,9 +6,8 @@ import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.db.NewsDBConfig;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.trip.R;
/**
......
package com.fly.tour.news.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.mvp.BaseView;
import com.fly.tour.db.entity.NewsDetail;
import io.reactivex.Observable;
/**
* Description: <NewsDetailContract><br>
......@@ -18,6 +21,6 @@ public interface NewsDetailContract {
void showNewsDetail(NewsDetail newsDetail);
}
interface Model{
NewsDetail getNewsDetailById(int id);
Observable<RespDTO<NewsDetail>> getNewsDetailById(int id);
}
}
package com.fly.tour.news.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.mvp.BaseRefreshView;
import com.fly.tour.common.mvp.BaseView;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.db.entity.NewsType;
import java.util.List;
import io.reactivex.Observable;
/**
* Description: <NewsListContract><br>
* Author: gxl<br>
......@@ -19,6 +20,6 @@ public interface NewsListContract {
}
interface View<NewsDetail> extends BaseRefreshView<NewsDetail> {}
interface Model{
List<NewsDetail> getNewsType(int type);
Observable<RespDTO<List<NewsDetail>>> getListNewsByType(int type);
}
}
package com.fly.tour.news.contract;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseView;
import java.util.List;
import io.reactivex.Observable;
public interface NewsTypeContract {
interface Presenter{
void getListNewsType();
}
interface View extends BaseView {
void showListNewsType(List<NewsType> list);
void initTabLayout();
}
interface Model{
Observable<RespDTO<List<NewsType>>> getListNewsType();
}
}
......@@ -11,11 +11,17 @@ import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseFragment;
import com.fly.tour.common.base.BaseMvpFragment;
import com.fly.tour.common.event.me.NewsTypeCrudEvent;
import com.fly.tour.common.manager.NewsDBManager;
import com.fly.tour.common.util.log.KLog;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.news.contract.NewsTypeContract;
import com.fly.tour.news.inject.component.DaggerNewsTypeComponent;
import com.fly.tour.news.inject.module.NewsTypeModule;
import com.fly.tour.news.model.NewsTypeModel;
import com.fly.tour.news.presenter.NewsTypePresenter;
import com.fly.tour.trip.R;
import org.greenrobot.eventbus.Subscribe;
......@@ -32,7 +38,7 @@ import java.util.logging.Handler;
* Version: V1.0.0<br>
* Update: <br>
*/
public class MainNewsFragment extends BaseFragment {
public class MainNewsFragment extends BaseMvpFragment<NewsTypeModel, NewsTypeContract.View, NewsTypePresenter> implements NewsTypeContract.View{
private List<String> titles = new ArrayList<>();
private List<NewsListFragment> mListFragments = new ArrayList<>();
private TabLayout mTabLayout;
......@@ -52,21 +58,20 @@ public class MainNewsFragment extends BaseFragment {
@Override
public void initView(View view) {
mViewPager = view.findViewById(R.id.pager_tour);
mTabLayout = view.findViewById(R.id.layout_tour);
}
@Override
public void initData() {
mPresenter.getListNewsType();
}
@Override
public void initListener() {
initNewsListFragment();
//mViewPager.setOffscreenPageLimit(mListFragments.size());
}
public void initTabLayout() {
mNewsFragmentAdapter = new NewsFragmentAdapter(getChildFragmentManager());
mViewPager.setAdapter(mNewsFragmentAdapter);
mNewsFragmentAdapter.refreshViewPager(mListFragments);
......@@ -90,6 +95,25 @@ public class MainNewsFragment extends BaseFragment {
mTabLayout.setupWithViewPager(mViewPager);
}
@Override
public void injectPresenter() {
DaggerNewsTypeComponent.builder().newsTypeModule(new NewsTypeModule(this)).build().inject(this);
}
@Override
public void showListNewsType(List<com.fly.tour.api.newstype.entity.NewsType> listNewsType) {
KLog.v("MYTAG", "initNewsListFragment start..." + listNewsType.toString());
mListFragments.clear();
titles.clear();
if (listNewsType != null && listNewsType.size() > 0) {
for (int i = 0; i < listNewsType.size(); i++) {
NewsType newsType = listNewsType.get(i);
mListFragments.add(NewsListFragment.newInstance(newsType));
titles.add(newsType.getTypename());
}
}
}
class NewsFragmentAdapter extends FragmentPagerAdapter {
public FragmentManager mFragmentManager;
List<NewsListFragment> pages;
......@@ -141,20 +165,6 @@ public class MainNewsFragment extends BaseFragment {
}
}
private void initNewsListFragment() {
List<NewsType> listNewsType = NewsDBManager.getInstance(getContext()).getListNewsType();
KLog.v("MYTAG", "initNewsListFragment start..." + listNewsType.toString());
mListFragments.clear();
titles.clear();
if (listNewsType != null && listNewsType.size() > 0) {
for (int i = 0; i < listNewsType.size(); i++) {
NewsType newsType = listNewsType.get(i);
mListFragments.add(NewsListFragment.newInstance(newsType));
titles.add(newsType.getTypename());
}
}
}
@Override
public String getToolbarTitle() {
return null;
......@@ -173,8 +183,7 @@ public class MainNewsFragment extends BaseFragment {
KLog.v("MYTAG", "ViewPager refresh start...");
mIsfresh = false;
mViewPager.setCurrentItem(mListFragments.size() - 1);
initNewsListFragment();
//mViewPager.setOffscreenPageLimit(mListFragments.size());
initData();
mNewsFragmentAdapter.refreshViewPager(mListFragments);
}
}
......
......@@ -7,15 +7,13 @@ import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.base.BaseAdapter;
import com.fly.tour.common.base.BaseFragment;
import com.fly.tour.common.base.BaseRefreshFragment;
import com.fly.tour.common.event.KeyCode;
import com.fly.tour.common.event.me.NewsDetailCurdEvent;
import com.fly.tour.common.mvp.BaseRefreshPresenter;
import com.fly.tour.common.util.log.KLog;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.news.NewsDetailActivity;
import com.fly.tour.news.adapter.NewsListAdatper;
import com.fly.tour.news.contract.NewsListContract;
......@@ -31,7 +29,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
* Description: <人工智能><br>
* Description: <NewsListFragment><br>
* Author: gxl<br>
* Date: 2018/12/11<br>
* Version: V1.0.0<br>
......@@ -104,9 +102,6 @@ public class NewsListFragment extends BaseRefreshFragment<NewsListModel,NewsList
return R.id.refview_news_list;
}
@Override
public void onRefreshEvent() {
mPresenter.refreshData();
......
package com.fly.tour.news.inject.component;
import com.fly.tour.news.NewsDetailActivity;
import com.fly.tour.news.contract.NewsTypeContract;
import com.fly.tour.news.fragment.MainNewsFragment;
import com.fly.tour.news.inject.module.NewsDetailModule;
import com.fly.tour.news.inject.module.NewsTypeModule;
import dagger.Component;
/**
* Description: <NewsDetailComponent><br>
* Author: gxl<br>
* Date: 2019/5/31<br>
* Version: V1.0.0<br>
* Update: <br>
*/
@Component(modules = {NewsTypeModule.class})
public interface NewsTypeComponent {
void inject(MainNewsFragment mainNewsFragment);
}
......@@ -2,8 +2,7 @@ package com.fly.tour.news.inject.module;
import android.content.Context;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.news.contract.NewsDetailContract;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.news.contract.NewsListContract;
import dagger.Module;
......
package com.fly.tour.news.inject.module;
import android.content.Context;
import com.fly.tour.news.contract.NewsDetailContract;
import com.fly.tour.news.contract.NewsTypeContract;
import dagger.Module;
import dagger.Provides;
/**
* Description: <NewsDetailModule><br>
* Author: gxl<br>
* Date: 2019/5/31<br>
* Version: V1.0.0<br>
* Update: <br>
*/
@Module
public class NewsTypeModule {
private NewsTypeContract.View mView;
public NewsTypeModule(NewsTypeContract.View view) {
this.mView = view;
}
@Provides
public Context providerContext(){
return mView.getContext();
}
@Provides
public NewsTypeContract.View providerNewsTypeView(){
return mView;
}
}
......@@ -2,14 +2,18 @@ package com.fly.tour.news.model;
import android.content.Context;
import com.fly.tour.api.NewsDetailService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.db.NewsDBConfig;
import com.fly.tour.db.dao.NewsDetailDao;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.news.contract.NewsDetailContract;
import javax.inject.Inject;
import io.reactivex.Observable;
/**
* Description: <NewsDetailModel><br>
* Author: gxl<br>
......@@ -18,16 +22,18 @@ import javax.inject.Inject;
* Update: <br>
*/
public class NewsDetailModel extends BaseModel implements NewsDetailContract.Model {
private NewsDetailDao mNewsDetailDao;
private NewsDetailService mNewsDetailService;
@Inject
public NewsDetailModel(Context context, NewsDetailDao newsDetailDao) {
public NewsDetailModel(Context context) {
super(context);
mNewsDetailDao = newsDetailDao;
mNewsDetailService = RetrofitManager.getInstance().getNewsDetailService();
}
@Override
public NewsDetail getNewsDetailById(int id) {
return mNewsDetailDao.getNewsDetailById(id);
public Observable<RespDTO<NewsDetail>> getNewsDetailById(int id) {
return mNewsDetailService.getNewsDetailById(RetrofitManager.getInstance().TOKEN,id)
.compose(RxAdapter.bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
......@@ -2,17 +2,19 @@ package com.fly.tour.news.model;
import android.content.Context;
import com.fly.tour.api.NewsDetailService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.db.NewsDBConfig;
import com.fly.tour.db.dao.NewsDetailDao;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.db.entity.NewsType;
import com.fly.tour.news.contract.NewsListContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
/**
* Description: <NewsListModel><br>
* Author: gxl<br>
......@@ -21,15 +23,18 @@ import javax.inject.Inject;
* Update: <br>
*/
public class NewsListModel extends BaseModel implements NewsListContract.Model {
private NewsDetailDao mDetailDao;
private NewsDetailService mNewsDetailService;
@Inject
public NewsListModel(Context context, NewsDetailDao detailDao) {
public NewsListModel(Context context) {
super(context);
mDetailDao = detailDao;
mNewsDetailService = RetrofitManager.getInstance().getNewsDetailService();
}
@Override
public List<NewsDetail> getNewsType(int type) {
return mDetailDao.getListNewsByType(type);
public Observable<RespDTO<List<NewsDetail>>> getListNewsByType(int typeid) {
return mNewsDetailService.getListNewsDetailByType(RetrofitManager.getInstance().TOKEN,typeid)
.compose(RxAdapter.<RespDTO<List<NewsDetail>>>bindUntilEvent(getLifecycle()))
.compose(RxAdapter.exceptionTransformer())
.compose(RxAdapter.schedulersTransformer());
}
}
package com.fly.tour.news.model;
import android.content.Context;
import com.fly.tour.api.NewsTypeService;
import com.fly.tour.api.RetrofitManager;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.http.RxAdapter;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.news.contract.NewsTypeContract;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
public class NewsTypeModel extends BaseModel implements NewsTypeContract.Model {
private NewsTypeService mNewsTypeService;
@Inject
public NewsTypeModel(Context context) {
super(context);
mNewsTypeService = RetrofitManager.getInstance().getNewsTypeService();
}
@Override
public Observable<RespDTO<List<NewsType>>> getListNewsType() {
return mNewsTypeService.getListNewsType(RetrofitManager.getInstance().TOKEN)
.compose(RxAdapter.bindUntilEvent(getLifecycle()))
.compose(RxAdapter.schedulersTransformer())
.compose(RxAdapter.exceptionTransformer());
}
}
......@@ -2,9 +2,10 @@ package com.fly.tour.news.presenter;
import android.content.Context;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.mvp.BasePresenter;
import com.fly.tour.common.util.NetUtil;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.news.contract.NewsDetailContract;
import com.fly.tour.news.model.NewsDetailModel;
......@@ -12,6 +13,9 @@ import java.util.logging.Handler;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsDetailPresenter><br>
* Author: gxl<br>
......@@ -28,22 +32,35 @@ public class NewsDetailPresenter extends BasePresenter<NewsDetailModel,NewsDetai
@Override
public void getNewsDetailById(final int id) {
mView.showInitLoadView();
new android.os.Handler().postDelayed(new Runnable() {
if(!NetUtil.checkNetToast()){
mView.showNetWorkErrView();
return;
}
mModel.getNewsDetailById(id).subscribe(new Observer<RespDTO<NewsDetail>>() {
@Override
public void run() {
if(!NetUtil.checkNetToast()){
mView.showNetWorkErrView();
return;
}
NewsDetail newsDetail = mModel.getNewsDetailById(id);
public void onSubscribe(Disposable d) {
mView.showInitLoadView();
}
@Override
public void onNext(RespDTO<NewsDetail> newsDetailRespDTO) {
NewsDetail newsDetail = newsDetailRespDTO.data;
if(newsDetail != null){
mView.showNewsDetail(newsDetail);
}else{
mView.showNoDataView();
}
}
@Override
public void onError(Throwable e) {
mView.hideInitLoadView();
}
@Override
public void onComplete() {
mView.hideInitLoadView();
}
},1000 * 2);
});
}
}
package com.fly.tour.news.presenter;
import android.content.Context;
import android.os.Handler;
import com.fly.tour.common.mvp.BaseModel;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.news.entity.NewsDetail;
import com.fly.tour.common.mvp.BaseRefreshPresenter;
import com.fly.tour.common.util.NetUtil;
import com.fly.tour.db.NewsDBConfig;
import com.fly.tour.db.entity.NewsDetail;
import com.fly.tour.news.contract.NewsListContract;
import com.fly.tour.news.model.NewsListModel;
......@@ -15,6 +13,9 @@ import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsListPresenter><br>
* Author: gxl<br>
......@@ -33,37 +34,65 @@ public class NewsListPresenter extends BaseRefreshPresenter<NewsListModel, NewsL
@Override
public void refreshData() {
mView.hideNoDataView();
if (!NetUtil.checkNetToast()) {
mView.showNetWorkErrView();
return;
}
mModel.getListNewsByType(newsType).subscribe(new Observer<RespDTO<List<NewsDetail>>>() {
@Override
public void onSubscribe(Disposable d) {
mView.showInitLoadView();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(!NetUtil.checkNetToast()){
mView.showNetWorkErrView();
return;
}
List<NewsDetail> datailList = mModel.getNewsType(newsType);
if(datailList != null && datailList.size() > 0){
public void onNext(RespDTO<List<NewsDetail>> listRespDTO) {
List<NewsDetail> datailList = listRespDTO.data;
if (datailList != null && datailList.size() > 0) {
mView.refreshData(datailList);
}else{
} else {
mView.showNoDataView();
}
mView.stopRefresh();
}
@Override
public void onError(Throwable e) {
mView.hideInitLoadView();
}
}, 1000 * 2);
@Override
public void onComplete() {
mView.hideInitLoadView();
}
});
}
@Override
public void loadMoreData() {
new Handler().postDelayed(new Runnable() {
mModel.getListNewsByType(newsType).subscribe(new Observer<RespDTO<List<NewsDetail>>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(RespDTO<List<NewsDetail>> listRespDTO) {
List<NewsDetail> datailList = listRespDTO.data;
if (datailList != null && datailList.size() > 0) {
mView.loadMoreData(datailList);
}
}
@Override
public void run() {
List<NewsDetail> datailList = mModel.getNewsType(newsType);
mView.loadMoreData(datailList);
public void onError(Throwable e) {
mView.stopLoadMore();
}
@Override
public void onComplete() {
mView.stopLoadMore();
}
}, 1000 * 2);
});
}
public void setNewsType(int newsType) {
......
package com.fly.tour.news.presenter;
import android.content.Context;
import com.facebook.stetho.json.annotation.JsonProperty;
import com.fly.tour.api.dto.RespDTO;
import com.fly.tour.api.newstype.entity.NewsType;
import com.fly.tour.common.mvp.BasePresenter;
import com.fly.tour.news.contract.NewsTypeContract;
import com.fly.tour.news.model.NewsTypeModel;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
/**
* Description: <NewsTypePresenter><br>
* Author: gxl<br>
* Date: 2019/6/23<br>
* Version: V1.0.0<br>
* Update: <br>
*/
public class NewsTypePresenter extends BasePresenter<NewsTypeModel, NewsTypeContract.View> implements NewsTypeContract.Presenter {
@Inject
public NewsTypePresenter(Context context, NewsTypeContract.View view, NewsTypeModel model) {
super(context, view, model);
}
@Override
public void getListNewsType() {
mModel.getListNewsType().subscribe(new Observer<RespDTO<List<NewsType>>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(RespDTO<List<NewsType>> listRespDTO) {
mView.showListNewsType(listRespDTO.data);
mView.initTabLayout();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册