登录布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#4f4"
android:orientation="vertical"
tools:context=".view.MainActivity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="130dp"
android:hint="请输入电话号"
android:padding="18dp"
android:background="#dddddd"/>
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:hint="请输入密码"
android:padding="18dp"
android:background="#dddddd"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:layout_marginTop="10dp"
android:layout_marginLeft="30dp"
android:textColor="#ffffff"
android:text="记住密码"/>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:layout_marginTop="10dp"
android:textColor="#ffffff"
android:background="#00dddddd"
android:layout_marginLeft="200dp"
android:text="快速注册"/>
</LinearLayout>
<Button
android:id="@+id/bt2"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:textSize="30dp"
android:text="登录"/>
<Button
android:id="@+id/bt3"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:textSize="30dp"
android:text="QQ登录"/>
</LinearLayout>
CallBack
package com.bawei.xiejiaqi0227.interfaces;
public interface CallBack {
public void Success(String result);
public void Error(String msg);
}
OkHttp
package com.bawei.xiejiaqi0227.util;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpUtil {
static String info = "";
private static OkHttpUtil okHttpUtil = null;
private OkHttpUtil(){
};
private static OkHttpUtil getInstance(){
if (okHttpUtil == null){
okHttpUtil = new OkHttpUtil();
}else{
return okHttpUtil;
}
return okHttpUtil;
}
public static void doPost(final Handler handler, int tag, String phone, String pwd){
String url = "";
if (tag == 0){
url = "http://172.17.8.100/small/user/v1/login";
}else{
url = "http://172.17.8.100/small/user/v1/register";
}
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("phone",phone)
.add("pwd",pwd)
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
info = "请求失败";
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
try {
JSONObject jsonObject = new JSONObject(string);
info = jsonObject.getString("message");
Log.e("tag",info);
Message message = new Message();
message.obj = info;
handler.sendMessage(message);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
Modle接口
package com.bawei.xiejiaqi0227.modle;
import com.bawei.xiejiaqi0227.interfaces.CallBack;
public interface IModle {
void getCa(CallBack callBack,int tag,String phone,String pwd);
}
Modle实现类
package com.bawei.xiejiaqi0227.modle;
import android.os.Handler;
import android.os.Message;
import com.bawei.xiejiaqi0227.interfaces.CallBack;
import com.bawei.xiejiaqi0227.util.OkHttpUtil;
public class MainModle implements IModle{
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = (String) msg.obj;
if (s.contains("成功")){
callBack.Success(s);
}else{
callBack.Error(s);
}
}
};
private CallBack callBack;
@Override
public void getCa(CallBack callBack, int tag, String phone, String pwd) {
this.callBack = callBack;
OkHttpUtil.doPost(handler,tag,phone,pwd);
}
}
Presenter接口
package com.bawei.xiejiaqi0227.presenter;
public interface IPresenter {
void getLogin(int tag,String phone,String pwd);
}
Presenter的实现类
package com.bawei.xiejiaqi0227.presenter;
import com.bawei.xiejiaqi0227.interfaces.CallBack;
import com.bawei.xiejiaqi0227.modle.MainModle;
import com.bawei.xiejiaqi0227.view.IView;
public class MainPresenter implements IPresenter{
private MainModle mainModle;
private IView iView;
public MainPresenter(IView iView) {
mainModle = new MainModle();
this.iView = iView;
}
@Override
public void getLogin(final int tag, String phone, String pwd) {
mainModle.getCa(new CallBack() {
@Override
public void Success(String result) {
iView.getShow(result,tag);
}
@Override
public void Error(String msg) {
iView.getShow(msg,tag);
}
},tag,phone,pwd);
}
public void onDestory(){
if (mainModle != null){
mainModle = null;
}else if (iView != null){
iView = null;
}
}
}
View的接口
package com.bawei.xiejiaqi0227.view;
public interface IView {
void getShow(String info,int tag);
}
View的实现类
package com.bawei.xiejiaqi0227.view;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import com.bawei.xiejiaqi0227.R;
import com.bawei.xiejiaqi0227.presenter.MainPresenter;
public class MainActivity extends AppCompatActivity implements IView,View.OnClickListener{
private EditText et1,et2;
private CheckBox cb1;
private Button bt1,bt2,bt3;
private MainPresenter presenter;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
et1 = findViewById(R.id.et1);
et2 = findViewById(R.id.et2);
cb1 = findViewById(R.id.cb1);
bt1 = findViewById(R.id.bt1);
bt2 = findViewById(R.id.bt2);
bt3 = findViewById(R.id.bt3);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
presenter = new MainPresenter(this);
sp = getSharedPreferences("bt2", Context.MODE_PRIVATE);
if (sp.getBoolean("remober",false)){
String phone = sp.getString("phone", "");
String pwd = sp.getString("pwd", "");
et1.setText(phone);
et2.setText(pwd);
cb1.setChecked(false);
}
/*
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);
}
*/
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt2:
String phone1 = et1.getText().toString();
String pwd1 = et2.getText().toString();
presenter.getLogin(0,phone1,pwd1);
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("remober",cb1.isChecked());
edit.putString("phone",phone1);
edit.putString("pwd",pwd1);
edit.commit();
break;
case R.id.bt1:
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
finish();
startActivity(intent);
break;
}
}
@Override
public void getShow(String info, int tag) {
if (info.equals("登录成功")){
Toast.makeText(MainActivity.this,info,Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this,HomeActivity.class));
}else{
Toast.makeText(MainActivity.this,info,Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.onDestory();
}
}
注册的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#f4f"
tools:context=".view.RegisterActivity">
<EditText
android:id="@+id/set1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:hint="请输入电话号"
android:padding="18dp"
android:background="#dddddd"/>
<EditText
android:id="@+id/set2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:hint="请输入密码"
android:padding="18dp"
android:background="#dddddd"/>
<EditText
android:id="@+id/set3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:hint="请输入验证码"
android:padding="18dp"
android:background="#dddddd"/>
<Button
android:id="@+id/sbt1"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="100dp"
android:background="#00dddddd"
android:textSize="23dp"
android:text="已有账户?立即登录"/>
<Button
android:id="@+id/sbt2"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:textSize="30dp"
android:text="注册"/>
</LinearLayout>
注册的类
package com.bawei.xiejiaqi0227.view;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.bawei.xiejiaqi0227.R;
import com.bawei.xiejiaqi0227.presenter.MainPresenter;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener,IView{
private EditText set1,set2;
private Button sbt1,sbt2;
private MainPresenter presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register2);
set1 = findViewById(R.id.set1);
set2 = findViewById(R.id.set2);
sbt1 = findViewById(R.id.sbt1);
sbt2 = findViewById(R.id.sbt2);
sbt1.setOnClickListener(this);
sbt2.setOnClickListener(this);
presenter = new MainPresenter(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.sbt2:
String phone = set1.getText().toString();
String pwd = set2.getText().toString();
presenter.getLogin(1,phone,pwd);
break;
case R.id.sbt1:
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
finish();
startActivity(intent);
break;
}
}
@Override
public void getShow(String info, int tag) {
if (info.equals("注册成功")){
Toast.makeText(RegisterActivity.this,info,Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(RegisterActivity.this, MainActivity.class);
finish();
startActivity(intent1);
}else{
Toast.makeText(RegisterActivity.this,info,Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.onDestory();
}
}