//先搭建//MVP框架
//网络请求数据所以记得写网络权限
//back
package com.zhuyue.bwie.com.mvploginlx.back;
public interface CallBack {
void setData(T user);
void setError(T error);
}
//utils工具包
package com.zhuyue.bwie.com.mvploginlx.units;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/网络处理工具类/
public class HttpUtils {
/*
* Get请求方式
* */
public static String get(String urlStr) throws Exception {
URL url = new URL(urlStr);
//由一个有效的网址服务返回这个对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod(“GET”);
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
String inputStr = getInputStr(stream);
return inputStr;
}
//把流转成字符串
private static String getInputStr(InputStream stream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
StringBuffer sb = new StringBuffer();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
return sb.toString();
}
/*
* Post请求方式
* */
public static String post(String urlStr, String mobile, String pass) throws Exception {
String inputStr = "";
URL url = new URL(urlStr);
//由一个有效的网址服务返回这个对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setConnectTimeout(5000);
OutputStream outputStream = connection.getOutputStream();
String params = "mobile=" + mobile + "&password=" + pass;
outputStream.write(params.getBytes());
if (connection.getResponseCode() == 200) {
InputStream stream = connection.getInputStream();
inputStr = getInputStr(stream);
}
return inputStr;
}
}
//BaseActivity 抽的基类
package com.zhuyue.bwie.com.mvploginlx.base;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
protected abstract int getLayout();
protected abstract void initViews();
protected abstract void getOnCilck();
protected abstract void processLgic();
void init() {
if (getLayout()!=0){
setContentView(getLayout());
initViews();
getOnCilck();
processLgic();
}else {
throw new IllegalStateException(“请加载布局文件”);
}
}
}
//view
package com.zhuyue.bwie.com.mvploginlx.view;
public interface IView {
void success(T data);
void error(T error);
}
//Model接口
package com.zhuyue.bwie.com.mvploginlx.model;
import com.zhuyue.bwie.com.mvploginlx.back.CallBack;
public interface Model {
void getData(String url, String username, String password, CallBack callBack);
}
//ModelImpl
package com.zhuyue.bwie.com.mvploginlx.model;
import android.os.AsyncTask;
import android.os.Looper;
import com.google.gson.Gson;
import com.zhuyue.bwie.com.mvploginlx.back.CallBack;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.units.HttpUtils;
public class ModelImpl implements Model {
private CallBack callBack;
@Override
public void getData(String url, String username, String password, CallBack callBack) {
this.callBack=callBack;
String urlx=url+"?username="+username+"&password="+password;
new MyTaskone().execute(urlx);
}
class MyTaskone extends AsyncTask<String,Void,User>{
@Override
protected User doInBackground(String... strings) {
try {
String json=HttpUtils.get(strings[0]);
Gson gson=new Gson();
User user = gson.fromJson(json, User.class);
return user;
} catch (Exception e) {
Looper.prepare();
callBack.setError("异常");
Looper.loop();
}
return null;
}
@Override
protected void onPostExecute(User dataBeans) {
super.onPostExecute(dataBeans);
callBack.setData(dataBeans);
}
}
}
//Present
package com.zhuyue.bwie.com.mvploginlx.present;
public interface Present {
void startRequest(String url,String username,String password);
}
//PresentImpl
package com.zhuyue.bwie.com.mvploginlx.present;
import android.util.Log;
import com.zhuyue.bwie.com.mvploginlx.back.CallBack;
import com.zhuyue.bwie.com.mvploginlx.model.ModelImpl;
import com.zhuyue.bwie.com.mvploginlx.view.IView;
public class PresentImpl implements Present{
private IView iView;
private final ModelImpl model;
public PresentImpl(IView iView) {
this.iView = iView;
model = new ModelImpl();
}
@Override
public void startRequest(String mUrl, String username, String password) {
model.getData(mUrl, username, password, new CallBack() {
@Override
public void setData(Object user) {
iView.success(user);
}
@Override
public void setError(Object error) {
iView.error(error);
}
});
}
}
//ManinActivity的xml
<?xml version="1.0" encoding="utf-8"?><TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="8dp"
android:text="登录页面"
/>
<EditText
android:id="@+id/Edit_Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:hint="请输入账号"/>
<EditText
android:id="@+id/Edit_Pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:hint="请输入密码"
android:inputType="textPassword"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/CB1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"
/>
<CheckBox
android:id="@+id/CB2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自动登录"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
<Button
android:id="@+id/Login_Btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"/>
<Button
android:id="@+id/ZhuChe_Btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"/>
//ManinActivity
package com.zhuyue.bwie.com.mvploginlx;
import android.content.Intent;
import android.content.SharedPreferences;
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.zhuyue.bwie.com.mvploginlx.base.BaseActivity;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.present.PresentImpl;
import com.zhuyue.bwie.com.mvploginlx.ui.TwoActivity;
import com.zhuyue.bwie.com.mvploginlx.view.IView;
public class MainActivity extends BaseActivity implements IView {
private String mUrl = “http://www.xieast.com/api/user/login.php”;
private EditText mEditName;
private EditText mEditPass;
private CheckBox cb1;
private CheckBox cb2;
private Button mLoginBtn;
private SharedPreferences sp;
private SharedPreferences.Editor mEdit;
private PresentImpl present;
private Button ZhuCheBtn;
@Override
protected int getLayout() {
return R.layout.activity_main;
}
@Override
protected void initViews() {
mEditName = findViewById(R.id.Edit_Name);
mEditPass = findViewById(R.id.Edit_Pass);
cb1 = findViewById(R.id.CB1);
cb2 = findViewById(R.id.CB2);
mLoginBtn = findViewById(R.id.Login_Btn);
ZhuCheBtn = findViewById(R.id.ZhuChe_Btn);
}
@Override
protected void getOnCilck() {
mLoginBtn.setOnClickListener(this);
ZhuCheBtn.setOnClickListener(this);
cb1.setOnClickListener(this);
cb2.setOnClickListener(this);
}
@Override
protected void processLgic() {
sp = getSharedPreferences("zy", MODE_PRIVATE);
mEdit = sp.edit();
if (sp.getBoolean("cb1", false)) {
mEditName.setText(sp.getString("name", ""));
mEditPass.setText(sp.getString("pass", ""));
cb1.setChecked(true);
}
if (sp.getBoolean("cb2", false)) {
mEditName.setText(sp.getString("name", ""));
mEditPass.setText(sp.getString("pass", ""));
startActivity(new Intent(this, TwoActivity.class));
finish();
}
present = new PresentImpl(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Login_Btn:
String username = mEditName.getText().toString().trim();
String password = mEditPass.getText().toString().trim();
if (username.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "账号和密码不能为空", Toast.LENGTH_SHORT).show();
return;
} else {
present.startRequest(mUrl, username, password);
}
break;
case R.id.CB2:
if (cb2.isChecked()) {
cb1.setChecked(true);
}
break;
case R.id.CB1:
if (!cb1.isChecked()) {
cb2.setChecked(false);
}
break;
}
}
@Override
public void success(T data) {
User user = (User) data;
if (user.getCode() == 100) {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
String username = mEditName.getText().toString().trim();
String password = mEditPass.getText().toString().trim();
//记住密码
if (cb1.isChecked()) {
mEdit.putBoolean("cb1", true);
mEdit.putString("name", username);
mEdit.putString("pass", password);
} else {
mEdit.putBoolean("cb1", false);
}
//自动登录
if (cb2.isChecked()) {
mEdit.putBoolean("cb2", true);
mEdit.putString("name", username);
mEdit.putString("pass", password);
} else {
mEdit.putBoolean("cb2", false);
}
mEdit.commit();
startActivity(new Intent(this, TwoActivity.class));
finish();
} else {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void error(T error) {
String e = (String) error;
Toast.makeText(this,e, Toast.LENGTH_SHORT).show();
}
}
//注册
package com.zhuyue.bwie.com.mvploginlx.ui;
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.zhuyue.bwie.com.mvploginlx.R;
import com.zhuyue.bwie.com.mvploginlx.base.BaseActivity;
import com.zhuyue.bwie.com.mvploginlx.bean.Register;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.present.PresentImpl;
import com.zhuyue.bwie.com.mvploginlx.view.IView;
public class ThreeActivity extends BaseActivity implements IView {
private String mUrl = "http://120.27.23.105/user/reg";
private EditText mEditName;
private EditText mEditPass;
private Button zhuCheBtn;
private PresentImpl present;
@Override
protected int getLayout() {
return R.layout.activity_three;
}
@Override
protected void initViews() {
mEditName = findViewById(R.id.Edit_Name);
mEditPass = findViewById(R.id.Edit_Pass);
zhuCheBtn = findViewById(R.id.ZhuChe_Btn);
}
@Override
protected void getOnCilck() {
zhuCheBtn.setOnClickListener(this);
}
@Override
protected void processLgic() {
present = new PresentImpl(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ZhuChe_Btn:
String username = mEditName.getText().toString().trim();
String password = mEditPass.getText().toString().trim();
if (username.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "账号密码不能为空", Toast.LENGTH_SHORT).show();
return;
} else {
present.startRequest(mUrl, username, password);
}
break;
}
}
@Override
public void success(T data) {
User user= (User) data;
if (user.getCode()==1) {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
finish();
}
}
@Override
public void error(T error) {
Toast.makeText(this,error.toString()+"失败", Toast.LENGTH_SHORT).show();
}
}