//MyApp
public class MyApp extends Application { private static MyApp mApp; @Override public void onCreate() { super.onCreate(); mApp = this; } public static Context getAppContext() { return mApp; } }
//IView
public interface IView {
Context cotext();
}
//BasePresenter
public abstract class BasePresenter<V extends IView> { protected V view; public BasePresenter(V view) { this.view = view; initModel(); } //初始化model protected abstract void initModel(); //内存泄漏的解决 void onDestroy() { view = null; } }
//BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity { protected P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(provideLayoutId()); initView(); initListener(); //提供presenter presenter = providePresenter(); initData(); } protected abstract P providePresenter(); protected void initData(){} protected void initListener(){} protected void initView(){} protected abstract int provideLayoutId(); //解决内存泄漏 @Override protected void onDestroy() { presenter.onDestroy(); super.onDestroy(); } }
//LoginModel
public class LoginModel { public void login(final String account, String password, final ILoginModelCallback iLoginModelCallback) { //构建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder() .build(); //通过表单的形式,构建一个RequestBody,通过添加key-value的形式,上传参数 RequestBody requestBody = new FormBody.Builder() .add("source", "android") .add("mobile", account) .add("password", password) .build(); //通过我们构造的requestBody对象,去构造一个Request Request request = new Request.Builder() .url("https://www.zhaoapi.cn/user/login") .post(requestBody) .build(); //使用okHttpClient对象执行newCall,传入一个Request,去构造一个call请求 Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //失败 } @Override public void onResponse(Call call, Response response) throws IOException { //联功网请求成 String json = response.body().string(); LoginBean loginBean = new Gson().fromJson(json, LoginBean.class); String code = loginBean.getCode(); String msg = loginBean.getMsg(); if ("0".equalsIgnoreCase(code)) { //登陆成功 if(iLoginModelCallback!=null){ iLoginModelCallback.onLoginSuccess(loginBean); } } else { //登陆失败 if(iLoginModelCallback!=null){ iLoginModelCallback.onLoginFaild(msg); } } } }); } public interface ILoginModelCallback { void onLoginSuccess(LoginBean loginBean); void onLoginFaild(String error); }
}
//ILoginView
public interface ILoginView extends IView{ void onLoginSuccess(LoginBean loginBean); void onLoginFaild(String error); }
//LoginPresenter
public class LoginPresenter extends BasePresenter<ILoginView> { private LoginModel mLoginModel; public LoginPresenter(ILoginView loginView) { super(loginView); } @Override protected void initModel() { mLoginModel = new LoginModel(); } public void login(String account, String password) { if (account == null) { if (view != null) { view.onLoginFaild("手机号不能为空"); } return; } mLoginModel.login(account, password, new LoginModel.ILoginModelCallback() { @Override public void onLoginSuccess(LoginBean loginBean) { if (view != null) { view.onLoginSuccess(loginBean); } } @Override public void onLoginFaild(String error) { if (view != null) { view.onLoginFaild(error); } } }); } }
//LoginActivity
public class LoginActivity extends BaseActivity<LoginPresenter> implements View.OnClickListener, ILoginView { @Override protected LoginPresenter providePresenter() { return new LoginPresenter(this); } @Override protected void initListener() { findViewById(R.id.login).setOnClickListener(this); } @Override protected int provideLayoutId() { return R.layout.activity_main; } //登陆 @Override public void onClick(View v) { presenter .login("15501186523", "123456"); } @Override public void onLoginSuccess(final LoginBean loginBean) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LoginActivity.this, "登陆成功 :" + loginBean.getData().getMobile(), Toast.LENGTH_LONG).show(); } }); } @Override public void onLoginFaild(final String error) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LoginActivity.this, "登陆失败 : " + error, Toast.LENGTH_LONG).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); } @Override public Context cotext() { return this; } }