bean层
private Object age;
private String appkey;
private String appsecret;
private String createtime;
private Object email;
private Object fans;
private Object follow;
private Object gender;
private Object icon;
private Object latitude;
private Object longitude;
private String mobile;
private Object money;
private Object nickname;
private String password;
private Object praiseNum;
private String token;
private int uid;
private Object userId;
private String username;
public Object getAge() {
return age;
}
public void setAge(Object age) {
this.age = age;
}
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Object getEmail() {
return email;
}
public void setEmail(Object email) {
this.email = email;
}
public Object getFans() {
return fans;
}
public void setFans(Object fans) {
this.fans = fans;
}
public Object getFollow() {
return follow;
}
public void setFollow(Object follow) {
this.follow = follow;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public Object getIcon() {
return icon;
}
public void setIcon(Object icon) {
this.icon = icon;
}
public Object getLatitude() {
return latitude;
}
public void setLatitude(Object latitude) {
this.latitude = latitude;
}
public Object getLongitude() {
return longitude;
}
public void setLongitude(Object longitude) {
this.longitude = longitude;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Object getMoney() {
return money;
}
public void setMoney(Object money) {
this.money = money;
}
public Object getNickname() {
return nickname;
}
public void setNickname(Object nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Object getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(Object praiseNum) {
this.praiseNum = praiseNum;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public Object getUserId() {
return userId;
}
public void setUserId(Object userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public class Result<T> {
int code;
String msg;
T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
core层
第一步:接口
public interface DataCall<T> {
void success(T data);
void fail(Result result);
}
第二步:Application的配置
public class XFApp extends Application {
private static XFApp instance;
private SharedPreferences mSharedPreferences;
@Override
public void onCreate() {
super.onCreate();
instance = this;
mSharedPreferences = getSharedPreferences("application",
Context.MODE_PRIVATE);
UMConfigure.init(this,"5c089159b465f59767000066","小米",UMConfigure.DEVICE_TYPE_PHONE,"");
/**
* 设置组件化的Log开关
* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(true);
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
public static XFApp getInstance() {
return instance;
}
public SharedPreferences getShare() {
return mSharedPreferences;
}
}
第三步:BasePresenter
public abstract class BasePresenter {
DataCall dataCall;
public BasePresenter(DataCall dataCall) {
this.dataCall=dataCall;
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Result result = (Result) msg.obj;
if (result.getCode()==0){
dataCall.success(result.getData());
}else{
dataCall.fail(result);
}
}
};
public void requestData(final String... args){
new Thread(new Runnable() {
@Override
public void run() {
Message message = handler.obtainMessage();
message.obj=getData(args);
handler.sendMessage(message);
}
}).start();
}
protected abstract Result getData(String...args);
}
http层
第一步:网络层
public static String get(String urlString){
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
/* urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置
urlConnection.setConnectTimeout(8000);//设置链接超时间*/
InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流;
//可拼接的字符串
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp = "";
while ((temp = bufferedReader.readLine()) != null) {
stringBuilder.append(temp);
temp = "";
}
//这个是网络获取的数据
String data = stringBuilder.toString();
Log.e("xf",data);
return data;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
第二步:判断手机号
public class StringUtil {
public static boolean isPhone(String phone){
String regex="^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
if (phone.length()!=11){
return false;
}else {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(phone);
boolean matches = m.matches();
return matches;
}
}
}
model层
public static Result login(final String mobile,final String pwd){
String resultString = Utils.get("http://www.zhaoapi.cn/user/reg?mobile="
+ mobile + "&password=" + pwd);
Gson gson=new Gson();
Type type=new TypeToken<Result<User>>(){}.getType();
Result result = gson.fromJson(resultString, type);
return result;
}
public static Result reg(final String mobile, final String pwd){
String resultString = Utils.get("http://www.zhaoapi.cn/user/login?mobile="
+ mobile+"&password="+pwd);
Gson gson = new Gson();
Type type = new TypeToken<Result<User>>() {}.getType();
Result result= gson.fromJson(resultString,type);
return result;
}
presenter层
public class LoginPresenter extends BasePresenter {
public LoginPresenter(DataCall dataCall) {
super(dataCall);
}
@Override
protected Result getData(String... args) {
Result login = LoginModel.reg(args[0], args[1]);
return login;
}
}
public class Presenter extends BasePresenter {
public Presenter(DataCall dataCall) {
super(dataCall);
}
@Override
protected Result getData(String... args) {
Result result = Model.login(args[0], args[1]);
return result;
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener
,DataCall<User>,CompoundButton.OnCheckedChangeListener {
private EditText phone,password;
private CheckBox zddl,jzmm;
LoginPresenter presenter=new LoginPresenter(this);
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phone = findViewById(R.id.phone);
password = findViewById(R.id.password);
zddl = findViewById(R.id.zddl);
jzmm = findViewById(R.id.jzmm);
findViewById(R.id.DengLu).setOnClickListener(this);
findViewById(R.id.ZhuCe).setOnClickListener(this);
findViewById(R.id.QQ).setOnClickListener(this);
sp = XFApp.getInstance().getShare();
if (sp.getString("user",null)!=null){
Intent intent=new Intent(this,ThreeActivity.class);
startActivity(intent);
finish();
}
boolean login = sp.getBoolean("login", false);
jzmm.setChecked(login);
if (login){
phone.setText(sp.getString("phone",""));
password.setText(sp.getString("password",""));
}
jzmm.setOnCheckedChangeListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.DengLu:
final String mobile = phone.getText().toString();
final String pass = password.getText().toString();
Log.e("xf",mobile);
Log.e("xf",pass);
if (!StringUtil.isPhone(mobile)){
Toast.makeText(this,"请输入正确手机号",Toast.LENGTH_SHORT).show();
return;
}
if (pass.length()<6){
Toast.makeText(this,"密码最少6位",Toast.LENGTH_LONG).show();
return;
}
boolean b = sp.getBoolean("login", false);
if (b){
SharedPreferences.Editor edit = sp.edit();
edit.putString("phone",mobile);
edit.putString("password",pass);
edit.commit();
}
presenter.requestData(mobile,pass);
break;
case R.id.ZhuCe:
Intent intent = new Intent(this,TwoActivity.class);
startActivity(intent);
break;
case R.id.QQ:
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);
}else{
UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, authListener);
}
break;
}
// if (v.getId()==R.id.DengLu){
//
// }else if (v.getId()==R.id.ZhuCe){
//
// }else if (v.getId()==R.id.QQ){
//
// }
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==123){
UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, authListener);
}
}
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授权开始的回调
* @param platform 平台名称
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this,ThreeActivity.class);
startActivity(intent);
finish();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(MainActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
};
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.getId()==R.id.jzmm){
SharedPreferences.Editor editor = sp.edit();
if (!isChecked){//取消记录密码
editor.remove("phone");//移除手机号
editor.remove("password");//移除密码
}
editor.putBoolean("login",isChecked);//保存记住密码状态
editor.commit();
}
}
@Override
public void success(User data) {
Toast.makeText(this,data.getUsername(),Toast.LENGTH_LONG).show();
SharedPreferences.Editor editor = sp.edit();
editor.putString("user",new Gson().toJson(data));
editor.commit();
Intent intent = new Intent(this,ThreeActivity.class);
startActivity(intent);
finish();
}
@Override
public void fail(Result result) {
Toast.makeText(this,result.getCode()+" "+result.getMsg(),Toast.LENGTH_LONG).show();
}
}
这是主方法
public class TwoActivity extends AppCompatActivity
implements View.OnClickListener,DataCall<User> {
private EditText password_two,phone_two;
private Presenter presenter = new Presenter(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
phone_two = findViewById(R.id.phone_two);
password_two = findViewById(R.id.password_two);
findViewById(R.id.ZhuCe_two).setOnClickListener(this);
}
@Override
public void onClick(View v) {
String mobile = phone_two.getText().toString();
String pas = password_two.getText().toString();
if (!StringUtil.isPhone(mobile)){
Toast.makeText(this,"请输入正确手机号",Toast.LENGTH_LONG).show();
return;
}
if (pas.length()<6){
Toast.makeText(this,"密码最少6位",Toast.LENGTH_LONG).show();
return;
}
presenter.requestData(mobile,pas);
}
@Override
public void success(User data) {
Toast.makeText(this,"注册成功,请登录",Toast.LENGTH_LONG).show();
finish();
}
@Override
public void fail(Result result) {
Toast.makeText(this,result.getMsg(),Toast.LENGTH_LONG).show();
}
}
注册层
public class ThreeActivity extends AppCompatActivity implements View.OnClickListener {
private SharedPreferences sp;
private ImageView image_view;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap bitmap = (Bitmap)msg.obj;
image_view.setImageBitmap(bitmap);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
sp = XFApp.getInstance().getShare();
image_view = findViewById(R.id.image_view);
String struser = sp.getString("user", "");
final User user=new Gson().fromJson(struser,User.class);
findViewById(R.id.button_one).setOnClickListener(this);
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode(user.getUsername(), 400);
Message message = handler.obtainMessage();
message.obj=bitmap;
handler.sendMessage(message);
}
}).start();
}
@Override
public void onClick(View v) {
XFApp.getInstance().getShare().edit().remove("user").commit();
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}
}
生成二维码和退出登录