MyCallBack:
public interface MyCallBack<T> {
void setData(T user);
void setError(T error);
}
model:
public interface Model {
//当我这个type==1时操作登录 当我这个type==2时操作注册
void getData(String url, String userName, String password,int type, MyCallBack callBack);
}
modelImpl:
public class ModelImpl implements Model {
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
//因为这个json串有问题 所以我们可以自己得到json判断处理
// try {
// String jsonStr = (String) msg.obj;
// Gson gson = new Gson();
// JSONObject object = new JSONObject(jsonStr);
// String data = object.optString("data");
// //登录的时候data是对象 注册的时候data是String
// if (data != null) {
// User user = new User();
// user.setCode(object.optString("code"));
// user.setMsg(object.optString("msg"));
// callBack.setData(user);
// } else {
// User user = gson.fromJson(jsonStr, User.class);
// callBack.setData(user);
// }
// } catch (JSONException e) {
// e.printStackTrace();
// }
switch (type) {
case 1:
String jsonStr = (String) msg.obj;
Gson gson = new Gson();
User user = gson.fromJson(jsonStr, User.class);
callBack.setData(user);
break;
case 2:
String jsonStr1 = (String) msg.obj;
Gson gson1 = new Gson();
UserRegister register = gson1.fromJson(jsonStr1, UserRegister.class);
callBack.setData(register);
break;
}
}
};
private MyCallBack callBack;
private int type;
@Override
public void getData(final String url, final String mobile, final String password, int type, final MyCallBack callBack) {
this.callBack = callBack;
this.type = type;
new Thread(new Runnable() {
@Override
public void run() {
try {
String jsonStr = HttpUtils.post(url, mobile, password);
mHandler.sendMessage(mHandler.obtainMessage(0, jsonStr));
} catch (Exception e) {
Looper.prepare();
callBack.setError("异常");
Looper.loop();
}
}
}).start();
}
}
Iview:
public interface IView<T> {
void success(T data);
void error(T error);
}
Ipresnter:
public interface IPresenter {
void startRequest(String url,String mobile,String password,int type);
}
PresenterImpl:
public class PresenterImpl implements IPresenter {
private ModelImpl model;
private IView iView;
public PresenterImpl(IView iView) {
this.iView = iView;
model = new ModelImpl();
}
@Override
public void startRequest(final String url, String mobile, String password,int type) {
model.getData(url, mobile, password,type, new MyCallBack() {
@Override
public void setData(Object user) {
iView.success(user);
}
@Override
public void setError(Object error) {
iView.error(error);
}
});
}
//防止内存泄漏
public void onDetatch() {
if (model != null) {
model = null;
}
if (iView != null) {
iView = null;
}
}
}
HttpUtils:
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;
}
main:
public class MainActivity<T> extends BaseActivity implements IView<T> {
private PresenterImpl presenter;
private EditText mMobile, mPassWord;
private Button mLogin, mRegister;
private String mUrl = "http://120.27.23.105/user/login";
private SharedPreferences mShared;
private boolean isLogin;
private SharedPreferences.Editor mEditor;
@Override
protected int getLayout() {
return R.layout.activity_main;
}
@Override
protected void initViews() {
mMobile = findViewById(R.id.Edit_Name);
mPassWord = findViewById(R.id.Edit_Pass);
mLogin = findViewById(R.id.Login_Btn);
mRegister = findViewById(R.id.Register_Btn);
}
@Override
protected void setOnClick() {
mLogin.setOnClickListener(this);
mRegister.setOnClickListener(this);
}
@Override
protected void processLogic() {
mShared = getSharedPreferences("lvxx", MODE_PRIVATE);
mEditor = mShared.edit();
isLogin = mShared.getBoolean("isLogin", false);
if (isLogin) {
startActivity(new Intent(this, HomeActivity.class));
finish();
}
presenter = new PresenterImpl(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Login_Btn:
String mobile = mMobile.getText().toString().trim();
String pass = mPassWord.getText().toString().trim();
if (mobile.isEmpty() || pass.isEmpty()) {
Toast.makeText(this, "账号和密码都不能为空", Toast.LENGTH_SHORT).show();
return;
} else {
presenter.startRequest(mUrl, mobile, pass,1);
}
break;
case R.id.Register_Btn:
startActivity(new Intent(this, RegisterActivity.class));
break;
}
}
@Override
public void success(T data) {
User user = (User) data;
if (user.getCode().equals("1")) {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, HomeActivity.class));
finish();
mEditor.putBoolean("isLogin", true);
mEditor.commit();
}
}
@Override
public void error(T error) {
String e = (String) error;
Toast.makeText(this, e, Toast.LENGTH_SHORT).show();
}
}
register:
public class RegisterActivity<T> extends BaseActivity implements IView<T> {
private PresenterImpl presenter;
private EditText mMobile, mPassWord;
private Button mRegister;
private String mUrl = "http://120.27.23.105/user/reg";
@Override
protected int getLayout() {
return R.layout.activity_register;
}
@Override
protected void initViews() {
mMobile = findViewById(R.id.Edit_Name);
mPassWord = findViewById(R.id.Edit_Pass);
mRegister = findViewById(R.id.Register_Btn);
}
@Override
protected void setOnClick() {
mRegister.setOnClickListener(this);
}
@Override
protected void processLogic() {
presenter = new PresenterImpl(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Register_Btn:
String mobile = mMobile.getText().toString().trim();
String pass = mPassWord.getText().toString().trim();
if (mobile.isEmpty() || pass.isEmpty()) {
Toast.makeText(this, "账号和密码都不能为空", Toast.LENGTH_SHORT).show();
return;
} else {
presenter.startRequest(mUrl, mobile, pass,2);
}
break;
}
}
@Override
public void success(T data) {
User user = (User) data;
if (user.getCode().equals("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();
}
}
home:
public class HomeActivity extends BaseActivity {
private TextView mTv;
private SharedPreferences mShared;
private SharedPreferences.Editor mEditor;
@Override
protected int getLayout() {
return R.layout.activity_home;
}
@Override
protected void initViews() {
mTv = findViewById(R.id.Home_Get);
}
@Override
protected void setOnClick() {
mTv.setOnClickListener(this);
}
@Override
protected void processLogic() {
mShared = getSharedPreferences("lvxx", MODE_PRIVATE);
mEditor = mShared.edit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Home_Get:
mEditor.clear();
mEditor.commit();
break;
}
}
}