BaseActivity
package com.example.com.mymvp1.ui.base;
public abstract class BaseActivaty<T extends BaseContract.BasePresenter> extends AppCompatActivity implements IBase,BaseContract.BaseView{
@Inject
protected T mPersenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
inject();
//绑定
mPersenter.attchView(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//解绑
mPersenter.detachView();
}
@Override
public void showLoading() {
}
@Override
public void dissMissLoading() {
}
}
BaseContract
public interface BaseContract {
interface BasePresenter<T extends BaseContract.BaseView>{
void attchView(T view);
void detachView();
}
interface BaseView{
void showLoading();
void dissMissLoading();
}
}
BaseFragment
public abstract class BaseFragment<T extends BaseContract.BasePresenter> extends Fragment implements IBase,BaseContract.BaseView{
@Inject
protected T mPresensenter;
private Unbinder unbinder;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
inject();
//绑定
if(mPresensenter!=null){
mPresensenter.attachView(this);
}
}
@Override
public void onDestroy() {
super.onDestroy();
//解绑
if(mPresensenter!=null){
mPresensenter.detachView();
}
if(unbinder!=null){
unbinder.unbind();
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(getConnectLayout(),null);
initView(view);
return view;
}
@Override
public void showLoading() {
}
@Override
public void dimissLoading() {
}
}
BasePersenter
public class BasePersenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T>{
protected T mView;
@Override
public void attchView(T view) {
this.mView=view;
}
@Override
public void detachView() {
if (mView!=null){
mView=null;
}
}
}
HttpComponent
@Component(modules = HttpModlue.class)
public interface HttpComponent {
void inject(MainActivity mainActivity);
}
LoginContract
public interface LoginContract {
interface View extends BaseContract.BaseView{
void logingSuccess(Mybean mybean);
}
interface Presenter extends BaseContract.BasePresenter<View>{
void login(String mobile,String password);
}
}
IBase
public interface IBase {
int getContentLouat();
void inject();
}
HttpModlue
@Module
public class HttpModlue {
@Provides
OkHttpClient.Builder OkHttp(){
return new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.readTimeout(20,TimeUnit.SECONDS);
}
@Provides
LoginApi myLoginApi(OkHttpClient.Builder builder){
LoginApiService loginApiService =new Retrofit.Builder()
.baseUrl("https://www.zhaoapi.cn/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(builder.build())
.build()
.create(LoginApiService.class);
return LoginApi.getLoginApi(loginApiService);
}
}
LoginApi
private LoginApi(LoginApiService loginApiService) {
this.loginApiService = loginApiService;
}
public static LoginApi getLoginApi(LoginApiService loginApiService){
if(loginApi==null){
loginApi=new LoginApi(loginApiService);
}
return loginApi;
}
public Observable<Mybean> login(String mobile,String password){
return loginApiService.login(mobile,password);
}
LoginApiServiece
public interface LoginApiService {
@FormUrlEncoded
@POST("user/login")
Observable<Mybean> login(@Field("mobile") String mobile,@Field("password") String password);
}
LoginPersenter
public class LoginPersenter extends BasePersenter<LoginContract.View> implements LoginContract.Presenter{
LoginApi loginApi;
@Inject
public LoginPersenter(LoginApi loginApi) {
this.loginApi = loginApi;
}
@Override
public void login(String mobile, String password) {
loginApi.login(mobile,password)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Mybean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Mybean mybean) {
mView.logingSuccess(mybean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
MainActivity
public class MainActivity extends BaseActivaty<LoginPersenter> implements View.OnClickListener,LoginContract.View {
/**
* 请输入您的手机号码
*/
private EditText mPhone;
/**
* 请输入密码
*/
private EditText mPassword;
/**
* 登录
*/
private Button mBut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentLouat());
initView();
}
private void initView() {
mPhone = (EditText) findViewById(R.id.phone);
mPassword = (EditText) findViewById(R.id.password);
mBut = (Button) findViewById(R.id.but);
mBut.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.but:
String phone = mPhone.getText().toString();
String password=mPassword.getText().toString();
mPersenter.login(phone,password);
break;
}
}
@Override
public int getContentLouat() {
return R.layout.activity_main;
}
@Override
public void inject() {
DaggerHttpComponent.builder()
.httpModlue(new HttpModlue())
.build()
.inject(this);
}
@Override
public void logingSuccess(Mybean mybean) {
Toast.makeText(this,""+mybean.getMsg(),Toast.LENGTH_SHORT).show();
}
}