一.导依赖
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'com.squareup.okio:okio:1.7.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
二.封装OKhttp
package com.example.login.util;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.google.gson.JsonIOException;
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;
}
//请求doPost方法
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();
}
}
});
}
}
三.创建model层
///model层的接口
package com.example.login.model;
import com.example.login.interfaces.CallBack;
public interface IModel {
void getCa(CallBack callBack, int tag, String phone, String pwd);
}
///model层的实现类
package com.example.login.model;
import android.os.Handler;
import android.os.Message;
import com.example.login.interfaces.CallBack;
import com.example.login.util.OkHttpUtil;
import javax.security.auth.callback.Callback;
import okhttp3.OkHttpClient;
public class MainModel implements IModel {
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层
///presenter的接口
package com.example.login.presenter;
public interface IPresenter {
void getLogin(int tag,String phone,String pwd);
}
///presenter的实现类
package com.example.login.presenter;
import com.example.login.interfaces.CallBack;
import com.example.login.model.MainModel;
import com.example.login.view.IView;
public class MainPresenter implements IPresenter {
private MainModel mainModel;
private IView iView;
public MainPresenter(IView iView){
mainModel = new MainModel();
this.iView = iView;
}
@Override
public void getLogin(final int tag, String phone, String pwd) {
mainModel.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(mainModel!=null){
mainModel = null;
}else if(iView != null){
iView = null;
}
}
}
五.view层的实现
package com.example.login.view;
public interface IView {
void getShow(String info,int tag);
}
六.创建一个接口
package com.example.login.interfaces;
public interface CallBack {
public void Success(String result);
public void Error(String msg);
}
七.登录页面MainActivity
package com.example.login.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.text.Editable;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import com.example.login.R;
import com.example.login.presenter.MainPresenter;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements IView,View.OnClickListener{
private EditText ed1;
private EditText ed2;
private Button login;
private Button kuai;
private MainPresenter presenter;
private SharedPreferences sp;
private CheckBox radioButton;
private Button qq;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
ed1 = findViewById(R.id.ed1);
ed2 = findViewById(R.id.ed2);
login = findViewById(R.id.login);
kuai = findViewById(R.id.kuai);
qq = findViewById(R.id.qq);
radioButton = findViewById(R.id.radioButton);
login.setOnClickListener(this);
kuai.setOnClickListener(this);
presenter = new MainPresenter(this);
sp = getSharedPreferences("login", Context.MODE_PRIVATE);
if (sp.getBoolean("remober", false)) {
String phone = sp.getString("phone", "");
String pwd = sp.getString("pwd", "");
ed1.setText(phone);
ed2.setText(pwd);
radioButton.setChecked(false);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.login:
String phone1 = ed1.getText().toString();
String pwd1 = ed2.getText().toString();
presenter.getLogin(0,phone1,pwd1);
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("remober",radioButton.isChecked());
edit.putString("phone",phone1);
edit.putString("pwd",pwd1);
edit.commit();
break;
case R.id.kuai:
startActivity(new Intent(MainActivity.this,RegisterActivity.class));
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();
}
}
八.注册Activity
package com.example.login.view;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.login.R;
import com.example.login.presenter.MainPresenter;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener,IView {
private Button register;
private EditText ed3;
private EditText ed4;
private EditText ed5;
private MainPresenter presenter;
private Button yi;
private SmsReceiver mSmsReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
ed3 = findViewById(R.id.ed3);
ed4 = findViewById(R.id.ed4);
ed5 = findViewById(R.id.ed5);
register = findViewById(R.id.register);
yi = findViewById(R.id.yi);
register.setOnClickListener(this);
yi.setOnClickListener(this);
presenter = new MainPresenter(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.register:
String phone3 = ed3.getText().toString();
String pwd3 = ed4.getText().toString();
presenter.getLogin(1,phone3,pwd3);
break;
case R.id.yi:
startActivity(new Intent(RegisterActivity.this,MainActivity.class));
break;
}
}
@Override
public void getShow(String info, int tag) {
if(info.equals("注册成功")){
Toast.makeText(RegisterActivity.this,info,Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegisterActivity.this,MainActivity.class));
}else{
Toast.makeText(RegisterActivity.this,info,Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.onDestory();
this.unregisterReceiver(mSmsReceiver);
}
}
布局文件需自写!!!