首先第一步导入OKhttp的依赖
implementation 'com.squareup.okhttp3:okhttp:3.6.0'
implementation 'com.squareup.okio:okio:1.11.0'
然后创建mvp框架
1.view层
package com.example.lianxi5.mvp;
public interface Iview {
void showSuccess(String msg);
void showError(String msg);
void login_success(String msg);
}
2.presenter层
package com.example.lianxi5.mvp;
public class Ipresender {
private Iview view;
private Imoder moder;
public Ipresender (Iview view){
this.view=view;
moder=new Imoder();
}
public void reg(String name,String password){
moder.reg(name, password, new Imoder.AccountCallach() {
@Override
public void onError(String string) {
view.showError("注册录失败");
}
@Override
public void onSuccess(String msg) {
view.showSuccess(msg);
}
});
}
public void login(String name,String password){
moder.login(name, password, new Imoder.AccountCallach() {
@Override
public void onError(String msg) {
view.showError("登录失败");
}
@Override
public void onSuccess(String msg) {
view.login_success(msg);
}
});
}
}
3.moder层
package com.example.lianxi5.mvp;
import com.example.lianxi5.bean.User;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Imoder {
private final OkHttpClient client;
public Imoder(){
client = new OkHttpClient
.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.build();
}
//注册
public void reg(String name, String password, final AccountCallach callach){
FormBody formBody=new FormBody
.Builder()
.add("mobile",name)
.add("password",password)
.build();
Request builder=new Request
.Builder()
.url("https://www.zhaoapi.cn/user/reg")
.post(formBody)
.build();
client.newCall(builder).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callach.onError(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
callach.onSuccess(response.body().string());
}
});
}
//登录
public void login(String name, String password, final AccountCallach callach){
FormBody formBody=new FormBody
.Builder()
.add("mobile",name)
.add("password",password)
.build();
Request builder=new Request
.Builder()
.url("https://www.zhaoapi.cn/user/login")
.post(formBody)
.build();
client.newCall(builder).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
callach.onError(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code()==200){
String result=response.body().string();
Gson gson = new Gson();
User user = gson.fromJson(result, User.class);
String code = user.getCode();
callach.onSuccess(code);
}
}
});
}
public interface AccountCallach {
void onError(String message);
void onSuccess(String string);
}
}
4.在mainactivity里面继承view
在main里面登录和注册分别添加了正规
账号:输入正确的手机格式
密码:密码不少于8位字母和数字组合
package com.example.lianxi5;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.lianxi5.mvp.Ipresender;
import com.example.lianxi5.mvp.Iview;
public class MainActivity extends AppCompatActivity implements Iview {
private EditText ediname;
private EditText edipwd;
private Button btn_login;
private Button btn_ren;
private Ipresender ipresender;
private String mName;
private String mPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ediname = findViewById(R.id.ediname);
edipwd = findViewById(R.id.edipwd);
btn_login = findViewById(R.id.btn_login);
btn_ren = findViewById(R.id.btn_ren);
ipresender = new Ipresender(this);
//注册
btn_ren.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rendnamepassword();
//正规
if (mName.matches("^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8]))\\d{8}$")){
if (mPassword.matches("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$")){
ipresender.reg(mName,mPassword);
}else{
Toast.makeText(MainActivity.this,"密码不能少于八位的数字字母的组合",Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this,"请输入正确的手机格式",Toast.LENGTH_SHORT).show();
}
}
});
//登录
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rendnamepassword();
if (mName.matches("^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8]))\\d{8}$")){
if (mPassword.matches("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$")){
ipresender.login(mName,mPassword);
}else{
Toast.makeText(MainActivity.this,"密码不能少于八位的数字字母的组合",Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(MainActivity.this,"请输入正确的手机格式",Toast.LENGTH_SHORT).show();
}
}
});
}
private void rendnamepassword() {
mName = ediname.getText().toString();
mPassword = edipwd.getText().toString();
}
@Override
public void showSuccess(final String msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void showError(final String msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void login_success(String msg) {
if (msg.equals("1")){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"手机号或者密码错误",Toast.LENGTH_SHORT).show();
}
});
}else{
Intent intent=new Intent(MainActivity.this,ShowActivity.class);
startActivity(intent);
}
}
}
注册和登录的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<EditText
android:id="@+id/ediname"
android:hint="请输入用户名"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edipwd"
android:hint="请输入密码"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_ren"
android:text="注册"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_login"
android:text="登录"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>