MVP注册登录
//布局登录
内有图片可忽略
<EditText
android:id="@+id/et_name"
android:layout_width=“300dp”
android:layout_marginTop=“70dp”
android:layout_gravity=“center”
android:layout_height=“wrap_content”
android:hint="请输入用户名"
/>
<EditText
android:id="@+id/et_password"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:password="true"
android:hint="请输入密码"
/>
<CheckBox
android:id="@+id/pwdss"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="记住密码"
/>
<ImageView
android:id="@+id/btn"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:src="@drawable/umeng_socialize_qq" />
<Button
android:id="@+id/mBt_denglu"
android:layout_width="300dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:background="@drawable/shape"
android:text="登录"
/>
<Button
android:id="@+id/mBt_zhuce"
android:layout_width="300dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:background="@drawable/shape"
android:layout_marginTop="20dp"
android:text="注册"
/>
![登录](https://img-blog.csdnimg.cn/20190303195715412.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNjA5NjEz,size_16,color_FFFFFF,t_70) //注册 <?xml version="1.0" encoding="utf-8"?>
<EditText
android:id="@+id/et_Zname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"
/>
<EditText
android:id="@+id/et_Zpassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
/>
<Button
android:id="@+id/mBt_zhuce"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="注册"
/>
//契约类 package com.example.nuli.contract;
public interface IContract {
//v层
public interface ILoginView{
public void loginData(String responseData);
}
//p层
public interface ILoginPresenter<ILoginView>{
//绑定
public void attach(ILoginView iLoginView);
//解绑
public void deach(ILoginView iLoginView);
//传值
public void requestData(String name, String password);
}
//m层
public interface ILoginModel{
public void containLoginData(String name, String password, CallBack callBack);
public interface CallBack{
public void responseData(String responseData);
}
}
}
//接口连接
package com.example.nuli.data;
/**
-
@author Alex
-
@date 2018/12/27.
-
GitHub:https://github.com/wangshuaialex
*/
public class Constant {
//登录的URL
public static final String LOGIN_URL = “http://172.17.8.100/small/user/v1/login”;//福利的URL
public static final String BEAUTY_URL = “http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword=3&page=1&count=10”;//福利的URL
public static final String BEAUTS_URL = “http://gank.io/api/data/福利/10/1”;
//注册
public static final String REQUEST_URL = “http://172.17.8.100/small/user/v1/register”;扫描二维码关注公众号,回复: 6133999 查看本文章//列表接口
public static final String LISTVIEW_URL = “http://www.zhaoapi.cn/product/searchProducts”;
//多条目
public static final String DUO_URL = “http://www.zhaoapi.cn/product/getCarts?uid=71”;
}
//适配器
package com.example.nuli.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.nuli.R;
import com.example.nuli.beans.JsonData;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<JsonData.ResultBean> listData;
private ViewHolderA viewHolderA;
public void Adapter(Context context, List<JsonData.ResultBean> listData) {
this.context = context;
this.listData = listData;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
RecyclerView.ViewHolder holder;
View inflate = LayoutInflater.from(context).inflate(R.layout.one, viewGroup, false);
holder = new ViewHolderA(inflate);
return holder;
}
//点击事件回调
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int i) {
((ViewHolderA) viewHolder).textView.setText(listData.get(i).getCommodityName());
Glide.with(context).load(listData.get(i).getMasterPic()).into(((ViewHolderA) viewHolder).image1);
//回调方法
((ViewHolderA) viewHolder).LinearLayout1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("I","123");
//实现每一条的点击
jiekou.itemOnclic(i);
}
});
}
@Override
public int getItemCount() {
return listData.size();
}
class ViewHolderA extends RecyclerView.ViewHolder {
@BindView(R.id.image1)
ImageView image1;
@BindView(R.id.textView)
TextView textView;
@BindView(R.id.LinearLayout1)
LinearLayout LinearLayout1;
public ViewHolderA(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
//初始化
public jiekou jiekou;
//通过方法实现
public void setJiekou( jiekou jiekou){
this.jiekou = jiekou;
}
//创建接口
public interface jiekou{
public void itemOnclic(int i);
}
}
//多条目
private int itemType;
public int getItemType() {
int result = itemType % 2;
return result;
}
//M层
package com.example.nuli.model;
import android.util.Log;
import com.example.nuli.contract.IContract;
import com.example.nuli.data.Constant;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class DlModel implements IContract.ILoginModel {
@Override
public void containLoginData(String name, String password, CallBack callBack) {
resepanseData(name,password,callBack);
}
private void resepanseData(String name, String password, final CallBack callBack) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
FormBody build = new FormBody.Builder().build();
Request builder = new Request.Builder()
.method("POST",build)
.url(Constant.LOGIN_URL+"?phone="+name+"&pwd="+password)
.build();
Call call=okHttpClient.newCall(builder);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String responseData = e.getMessage();
Log.i("jgq","responseData");
callBack.responseData(responseData);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String s = response.body().string();
callBack.responseData(s);
}
});
}
}
//p层
package com.example.nuli.persenter;
import com.example.nuli.contract.IContract;
import com.example.nuli.model.DlModel;
import java.lang.ref.SoftReference;
public class DlPersenter implements IContract.ILoginPresenter<IContract.ILoginView> {
private IContract.ILoginView iLoginView;
private SoftReference<IContract.ILoginView> iLoginViewSoftReference;
private DlModel dlModel;
@Override
public void attach(IContract.ILoginView iLoginView) {
this.iLoginView=iLoginView;
//软引用
iLoginViewSoftReference = new SoftReference<>(iLoginView);
//链接model
dlModel = new DlModel();
}
@Override
public void deach(IContract.ILoginView iLoginView) {
iLoginViewSoftReference.clear();
}
@Override
public void requestData(String name, String password) {
dlModel.containLoginData(name, password, new IContract.ILoginModel.CallBack() {
@Override
public void responseData(String responseData) {
iLoginView.loginData(responseData);
}
});
}
}
//v包含记住密码
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity implements IContract.ILoginView {
@BindView(R.id.et_name)
EditText etName;
@BindView(R.id.et_password)
EditText etPassword;
@BindView(R.id.mBt_denglu)
Button mBtDenglu;
@BindView(R.id.mBt_zhuce)
Button mBtZhuce;
@BindView(R.id.pwdss)
CheckBox pwdss;
@BindView(R.id.btn)
ImageView btn;
private DlPersenter dlPersenter;
private int remamberFlag = 0;
private String password = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//第三方登录
if (Build.VERSION.SDK_INT >= 23) {//QQ需要申请写入权限
String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE, Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS};
ActivityCompat.requestPermissions(this, mPermissionList, 123);
}
SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);
//如果不为空
if (sharedPreferences != null) {
String name = sharedPreferences.getString("name", "");
password = sharedPreferences.getString("password", "");
remamberFlag = sharedPreferences.getInt("remeber_flag", 0);
etName.setText(name);
}
//确定为1获取 记住密码,打钩
if (remamberFlag == 1) {
pwdss.setChecked(true);
etPassword.setText(password);
}
//链接persenter
dlPersenter = new DlPersenter();
dlPersenter.attach(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(MainActivity.this).onActivityResult(requestCode, resultCode, data);
}
@Override
public void loginData(final String responseData) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, responseData, Toast.LENGTH_LONG).show();
Gson gson = new Gson();
Login login = gson.fromJson(responseData, Login.class);
String status = login.getStatus();
if (status.equals("0000")) {
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent);
}
}
});
}
@OnClick({R.id.mBt_denglu, R.id.mBt_zhuce, R.id.pwdss,R.id.btn})
public void onClick(View view) {
switch (view.getId()) {
case R.id.mBt_denglu:
String name = etName.getText().toString();
String password = etPassword.getText().toString();
dlPersenter.requestData(name, password);
SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
//2 创建Editor对象,写入值
editor.putString("name", name);
if (pwdss.isChecked()) {
remamberFlag = 1;
editor.putInt("remeber_flag", remamberFlag);
editor.putString("password", password);
} else {
remamberFlag = 0;
editor.putInt("remeber_flag", remamberFlag);
}
//3 提交
editor.commit();
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();
break;
case R.id.mBt_zhuce:
Intent intent = new Intent(MainActivity.this, MainActivity1.class);
startActivity(intent);
break;
case R.id.btn:
UMShareAPI umShareAPI = UMShareAPI.get(MainActivity.this);
UMConfigure.setLogEnabled(true);
umShareAPI.getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
Intent intent1 = new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent1);
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
Log.i("Tag", map + "");
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
}
});
}
}
///防止溢出
@Override
protected void onDestroy() {
super.onDestroy();
dlPersenter.deach(this);
}
}