实现步骤:
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();
}
}
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();
}
}