布局页面<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="手机号:"
android:textSize="18sp" />
<EditText
android:id="@+id/edname"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:hint="请输入手机号"
android:padding="5dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:text="密 码:"
android:textSize="18sp" />
<EditText
android:id="@+id/edpwd"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:inputType="textPassword"
android:padding="5dp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="50dp"
android:paddingRight="55dp">
<CheckBox
android:id="@+id/jizhu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码" />
<CheckBox
android:id="@+id/zidong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="自动登录" />
</RelativeLayout>
<Button
android:id="@+id/submit_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login_btn"
android:text="提交" />
<Button
android:id="@+id/login_qq_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="login_qq_btn"
android:text="QQ登录"/>
代码页面
public class MainActivity extends AppCompatActivity implements DataCall {
private EditText edname;
private EditText edpwd;
private CheckBox jizhu;
private CheckBox zidong;
private SharedPreferences sp;
private BasePresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
presenter = new MyPresenter(this);
}
private void initData() {
boolean ji = sp.getBoolean("jizhu", false);
if (ji) {
jizhu.setChecked(ji);
String name = sp.getString("name", "");
String pwd = sp.getString("pwd", "");
edname.setText(name);
edpwd.setText(pwd);
}
final boolean zi = sp.getBoolean("zidong", false);
if (zi) {
startActivity(new Intent(MainActivity.this, TwoActivity.class));
finish();
}
//设置自动登录必须记住密码逻辑
zidong.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
MainActivity.this.jizhu.setChecked(true);
}
}
});
//设置不记住密码就无法实现自动登录逻辑
jizhu.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
zidong.setChecked(false);
}
}
});
}
public void login_btn(View view) {
String names = edname.getText().toString();
String pwds = edpwd.getText().toString();
presenter.requestData(names, pwds);
}
private void initView() {
edname = (EditText) findViewById(R.id.edname);
edpwd = (EditText) findViewById(R.id.edpwd);
jizhu = (CheckBox) findViewById(R.id.jizhu);
zidong = (CheckBox) findViewById(R.id.zidong);
sp = getSharedPreferences("login", MODE_PRIVATE);
}
@Override
public void success(User data) {
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
SharedPreferences.Editor edit = sp.edit();
edit.putString("name", edname.getText().toString());
edit.putString("pwd", edpwd.getText().toString());
edit.putBoolean("jizhu", jizhu.isChecked());
edit.putBoolean("zidong", zidong.isChecked());
edit.commit();
startActivity(new Intent(MainActivity.this, TwoActivity.class));
finish();
}
@Override
public void fail(Result result) {
Toast.makeText(this, result.getCode()+"" + result.getMsg(), Toast.LENGTH_SHORT).show();
}
public void login_qq_btn(View v){
if (v.getId()==R.id.login_qq_btn){
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 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);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
UMAuthListener authListener = new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@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,TwoActivity.class);
startActivity(intent);
finish();
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
/**
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
* @desc 授权成功的回调
*/
};
}
M层
public class MyModel {
public static Result login(final String name,final String pwd){
String resultString = Utils.get(“http://www.zhaoapi.cn/user/login?mobile=”
+name+"&password="+pwd);
Gson gson = new Gson();
Type type = new TypeToken<Result<User>>(){}.getType();
Result result = gson.fromJson(resultString,type);
return result;
}
}
C层
public interface DataCall {
void success(T data);
void fail(Result result);
}
public class DTApplication extends Application {
private static DTApplication 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 DTApplication getInstance() {
return instance;
}
public SharedPreferences getShare() {
return mSharedPreferences;
}
}
P层
public abstract class BasePresenter {
DataCall dataCall;
public BasePresenter(DataCall dataCall){
this.dataCall = dataCall;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message 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 Object getData(String[] args);
}
public abstract class BasePresenter {
DataCall dataCall;
public BasePresenter(DataCall dataCall){
this.dataCall = dataCall;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message 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 Object getData(String[] args);
}