实现步骤:
1. 在MVp包下的 Model包下 创建 LoginModel 类 Model主要用于联网请求数据
2. 在MVp包下的 View包下 创建MyLoginView 类
3. 在MVP包下的Presenter包下 创建 LoginPresenter 类
4. 在在MVp包下的 View包下创建activity包,然后在包下创建 LoginActivity(里面包含友盟登录)
5. 创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView
1. 在MVp包下的 Model包下 创建 LoginModel 类 Model主要用于联网请求数据
public class LoginModel { //进行联网请求 public void getDataNet(String mobile,String password,final onCallBackListener onCallBackListener){ String url=HttpConfig.URL_LOGIN; Map<String,String> map=new HashMap<>(); map.put("mobile",mobile); map.put("password",password); OkhttpUtils.getInstance().doPost(url, map, new OkhttpUtils.onCallBack() { @Override public void onFaild(Exception e) { } @Override public void onResponse(String json) { Gson gson = new Gson(); LoginBean loginBean = gson.fromJson(json, LoginBean.class); String msg = loginBean.getMsg(); String code = loginBean.getCode(); if("0".equalsIgnoreCase(code)){ if(onCallBackListener!=null){ onCallBackListener.onSuccess(loginBean); } }else{ if(onCallBackListener!=null){ onCallBackListener.onFaild(msg); } } } }); } //定义接口 public interface onCallBackListener{ void onSuccess(LoginBean loginBean); void onFaild(String error); } }
2. 在MVp包下的 View包下 创建LoginView 类
public interface LoginView extends IView { void onSuccess(LoginBean loginBean); void onFaild(String error); }
3. 在MVP包下的Presenter包下 创建 LoginPresenter 类
public class LoginPresenter extends BasePresenter<LoginView> { private LoginModel loginModel; public LoginPresenter(LoginView view) { super(view); } @Override protected void initModel() { loginModel=new LoginModel(); } public void login(String mobile,String password){ loginModel.getDataNet(mobile, password, new LoginModel.onCallBackListener() { @Override public void onSuccess(LoginBean loginBean) { if(view!=null){ view.onSuccess(loginBean); } } @Override public void onFaild(String error) { if(view!=null){ view.onFaild(error); } } }); } }
4. 在在MVp包下的 View包下创建activity包,然后在包下创建 LoginActivity
public class LoginActivity extends BaseActivity<LoginPresenter> implements View.OnClickListener,LoginView{ private EditText ed_mobile,password; private Button login,reg; @Override protected void initData() { } @Override protected LoginPresenter provides() { return new LoginPresenter((LoginView) this); } @Override protected void initListener() { login.setOnClickListener(this); login.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { UMShareAPI mShareAPI= UMShareAPI.get(LoginActivity.this); mShareAPI.getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener); return false; } }); } @Override protected void initView() { ed_mobile = findViewById(R.id.main_mobile); password=findViewById(R.id.main_password); login = findViewById(R.id.main_login); reg=findViewById(R.id.main_reg); } @Override protected int provideId() { return R.layout.activity_main; } //实现点击事件 @Override public void onClick(View v) { //获取输入框内容 String m = ed_mobile.getText().toString(); String p = password.getText().toString(); presenter.login(m,p); } //登录成功 @Override public void onSuccess(LoginBean loginBean) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); } }); } //登录失败 @Override public void onFaild(final String error) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LoginActivity.this,"登录失败"+error,Toast.LENGTH_SHORT).show(); } }); } public void getReg(View v){ Intent it = new Intent(LoginActivity.this, RegActivity.class); startActivity(it); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); } UMAuthListener authListener = new UMAuthListener() { /** * @desc 授权开始的回调 * @param platform 平台名称 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @desc 授权成功的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 * @param data 用户资料返回 */ @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { Toast.makeText(LoginActivity.this, "成功了", Toast.LENGTH_LONG).show(); } /** * @desc 授权失败的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 * @param t 错误原因 */ @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText(LoginActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show(); } /** * @desc 授权取消的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 */ @Override public void onCancel(SHARE_MEDIA platform, int action) { Toast.makeText(LoginActivity.this, "取消了", Toast.LENGTH_LONG).show(); } }; }
5. 创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView
//首先是IView(此类是一个接口)
public interface IView { } //其次是 BasePresenter (需要继承IView)
public abstract class BasePresenter <V extends IView>{ protected V view; public BasePresenter(V view) { this.view = view; initModel(); } protected abstract void initModel(); //解决内存泄漏 void onDestory(){ 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(provideId()); initView(); initListener(); //提供presenter presenter=provides(); initData(); } protected abstract void initData(); protected abstract P provides(); protected abstract void initListener(); protected abstract void initView(); protected abstract int provideId(); //解决内存泄漏 @Override protected void onDestroy() { super.onDestroy(); presenter.onDestory(); } }