From 2fb397e4a31d14880ed2524f898ae67a0d664c06 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 17 十二月 2024 11:24:29 +0800
Subject: [PATCH] 1.在地图中心显示中心点。 2.优化地图覆盖物显示,使显示的图标正对坐标。 3.优化地图覆盖物文字居中显示。
---
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 251 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
index b5f543c..8e62470 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
@@ -1,50 +1,117 @@
package com.dayu.pipirrapp.activity;
+import static com.dayu.pipirrapp.net.Constants.BASE_URL;
+
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.text.InputType;
+import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.bean.db.LoginBean;
+import com.dayu.pipirrapp.bean.net.CodeResult;
+import com.dayu.pipirrapp.bean.net.LoginResult;
+import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.ActivityLoginBinding;
+import com.dayu.pipirrapp.net.ApiManager;
+import com.dayu.pipirrapp.net.BaseResponse;
+import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.observer.LoginObserver;
-import com.hjq.permissions.OnPermissionCallback;
-import com.hjq.permissions.Permission;
-import com.hjq.permissions.XXPermissions;
+import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
+import com.dayu.pipirrapp.utils.ToastUtil;
+import com.tencent.bugly.crashreport.CrashReport;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
public class LoginActivity extends BaseActivity {
private final String TAG = "LoginActivity";
ActivityLoginBinding binding;
+ LoginObserver loginObserver;
+ //瀵嗙爜鏄惁鍙
private boolean isPasswordVisible = false;
+ //鏄惁鏄剧ず楠岃瘉鐮�
+ private boolean isShowCode;
+
+ private int loginError = 0;
+ private String codeToken;
+ //鐐瑰嚮娆℃暟鍒�10娆″悗鍙互閲嶆柊閫夋嫨tag
+ int clickNumber;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
-
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
- getLifecycle().addObserver(new LoginObserver(this));
+ initView();
+ initData();
+ }
+
+
+ private void initData() {
+
+ }
+
+
+ private void initView() {
+ loginObserver = new LoginObserver(this);
+ getLifecycle().addObserver(loginObserver);
binding.passwordBtn.setOnClickListener((view) -> {
togglePasswordVisibility();
});
binding.loginBtn.setOnClickListener(v -> {
- Intent intent = new Intent(LoginActivity.this, MainActivity.class);
- startActivity(intent);
- this.finish();
+ String phone = binding.name.getText().toString().trim();
+ String pw = binding.password.getText().toString().trim();
+ String code = binding.code.getText().toString().trim();
+ if (validatePhone(phone) && validatePassword(pw)) {
+ if (isShowCode) {
+ if (!validateCode(code)) {
+ return;
+ }
+ }
+ login(phone, pw, codeToken, code);
+ } else {
+ ToastUtil.showToast(LoginActivity.this, "璇疯緭鍏ユ纭俊鎭�");
+ }
+
});
+ binding.codeImg.setOnClickListener(v -> {
+ getCode();
+ });
+ binding.codeError.setOnClickListener(v -> {
+ getCode();
+ });
+ binding.version.setOnClickListener(v -> {
+ clickNumber++;
+ if (clickNumber == 10) {
+ //鐐瑰嚮娆℃暟鍒�10娆″悗鍙互閲嶆柊閫夋嫨tag
+ loginObserver.choesLibrary();
+ clickNumber = 0;
+ }
+ });
+ if (SharedPreferencesHelper.getInstance(LoginActivity.this).get(CommonKeyName.isShowCode, false)) {
+ isShowCode = true;
+ binding.codeLL.setVisibility(View.VISIBLE);
+ getCode();
+ }
}
+
private void togglePasswordVisibility() {
if (isPasswordVisible) {
@@ -57,12 +124,141 @@
binding.password.setInputType(InputType.TYPE_CLASS_TEXT);
binding.passwordBtn.setImageResource(R.drawable.vt_ps_open);
}
-
// 绉诲姩鍏夋爣鍒版湯灏�
binding.password.setSelection(binding.password.getText().length());
-
// 鍒囨崲鏍囧織
isPasswordVisible = !isPasswordVisible;
+ }
+
+ /**
+ * 鑾峰彇楠岃瘉鐮�
+ */
+ private void getCode() {
+ Map<String, Object> data = new HashMap<>();
+ data.put("type", "math");//鍥剧墖绫诲瀷锛歝har-鏂囨湰锛宮ath-涓�浣嶆暟绠楀紡锛宮ath2-涓や綅鏁扮畻寮�
+
+
+ ApiManager.getInstance().requestGetHideLoading(LoginActivity.this, BASE_URL + "/app/captcha/get", CodeResult.class, data, new SubscriberListener<BaseResponse<CodeResult>>() {
+ @Override
+ public void onNext(BaseResponse<CodeResult> t) {
+ try {
+ if (t.isSuccess()) {
+ String encodedString = t.getContent().getBase64();
+ codeToken = t.getContent().getToken();
+ // 绉婚櫎Base64瀛楃涓茬殑澶撮儴淇℃伅
+ encodedString = encodedString.substring("data:image/png;base64,".length());
+ // 瀵笲ase64瀛楃涓茶繘琛岃В鐮�
+ byte[] imageAsBytes = Base64.decode(encodedString, Base64.DEFAULT);
+ // 浣跨敤BitmapFactory灏嗗瓧鑺傛暟缁勮В鐮佹垚Bitmap瀵硅薄
+ Bitmap image = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
+ binding.codeImg.setImageBitmap(image);
+ binding.codeImg.setVisibility(View.VISIBLE);
+ binding.codeError.setVisibility(View.GONE);
+ } else {
+ binding.codeImg.setVisibility(View.INVISIBLE);
+ binding.codeError.setVisibility(View.VISIBLE);
+ ToastUtil.showToast(LoginActivity.this, "楠岃瘉鐮佽幏鍙栧け璐�");
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+
+ }
+ });
+
+
+// ApiManager.getInstance().getCode(data, new CodeListener() {
+// @Override
+// public void onNext(CodeResult body) {
+// try {
+// if (body != null && !TextUtils.isEmpty(body.getBase64())) {
+// String encodedString = body.getBase64();
+// codeToken = body.getToken();
+// // 绉婚櫎Base64瀛楃涓茬殑澶撮儴淇℃伅
+// encodedString = encodedString.substring("data:image/png;base64,".length());
+// // 瀵笲ase64瀛楃涓茶繘琛岃В鐮�
+// byte[] imageAsBytes = Base64.decode(encodedString, Base64.DEFAULT);
+// // 浣跨敤BitmapFactory灏嗗瓧鑺傛暟缁勮В鐮佹垚Bitmap瀵硅薄
+// Bitmap image = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
+// binding.codeImg.setImageBitmap(image);
+// binding.codeImg.setVisibility(View.VISIBLE);
+// binding.codeError.setVisibility(View.GONE);
+// } else {
+// binding.codeImg.setVisibility(View.INVISIBLE);
+// binding.codeError.setVisibility(View.VISIBLE);
+// ToastUtil.showToast(LoginActivity.this, "楠岃瘉鐮佽幏鍙栧け璐�");
+// }
+// } catch (Exception e) {
+// e.printStackTrace();
+// CrashReport.postCatchedException(e);
+// }
+// }
+//
+// @Override
+// public void error(Throwable throwable) {
+//
+// }
+// });
+ }
+
+ private void login(String phone, String pw, String token, String code) {
+
+ Map<String, Object> data = new HashMap<>();
+ data.put("phone", phone);
+ data.put("password", pw);
+ data.put("orgTag", MyApplication.myApplication.myTag);
+ if (isShowCode) {
+ data.put("token", token);
+ data.put("code", code);
+ }
+ ApiManager.getInstance().requestPostLoading(LoginActivity.this, BASE_URL + "/sso/sso/loginJson", LoginResult.class, data, new SubscriberListener<BaseResponse<LoginResult>>() {
+ @Override
+ public void onNext(BaseResponse<LoginResult> t) {
+ try {
+ if (t.isSuccess()) {
+ SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.Token, t.getContent().getToken());
+ MyApplication.myApplication.token = t.getContent().getToken();
+ MyApplication.myApplication.userId = t.getContent().getId();
+ LoginBean loginBean = DaoSingleton.getInstance(LoginActivity.this).loginDao().findFirst();
+ if (loginBean == null) {
+ loginBean = new LoginBean();
+ }
+ loginBean.setName(t.getContent().getName());
+ loginBean.setPhone(t.getContent().getPhone());
+ loginBean.setUserID(t.getContent().getId());
+ DaoSingleton.getInstance(LoginActivity.this).loginDao().insert(loginBean);
+ SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.isShowCode, false);
+ ToastUtil.showToastLong(LoginActivity.this, "鐧诲綍鎴愬姛!");
+ startMainActivity();
+
+ } else {
+ ToastUtil.showToast(LoginActivity.this, t.getMsg());
+ loginError++;
+ if (loginError >= 3) {
+ isShowCode = true;
+ SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.isShowCode, true);
+ binding.codeLL.setVisibility(View.VISIBLE);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+
+ }
+ });
+ }
+
+ /**
+ * 鍚姩MainActivity
+ */
+ private void startMainActivity() {
+ Intent intent = new Intent(LoginActivity.this, MainActivity.class);
+ startActivity(intent);
+ LoginActivity.this.finish();
}
@Override
@@ -77,7 +273,6 @@
super.onResume();
Log.i(TAG, "onResume");
}
-
@Override
protected void onRestart() {
@@ -102,6 +297,7 @@
@Override
protected void onDestroy() {
super.onDestroy();
+ getLifecycle().removeObserver(loginObserver);
Log.i(TAG, "onDestroy");
}
@@ -123,5 +319,47 @@
super.onRestoreInstanceState(savedInstanceState);
}
+ // 鎵嬫満鍙锋牎楠岋細纭繚鏄竴涓湁鏁堢殑鎵嬫満鍙�
+ private boolean validatePhone(String phone) {
+ // 浣跨敤姝e垯琛ㄨ揪寮忓垽鏂槸鍚︿负鏈夋晥鐨勬墜鏈哄彿鐮侊紙涓浗澶ч檰锛�
+ String phonePattern = "^1[3-9]\\d{9}$"; // 绠�鍗曠殑鎵嬫満鍙风爜姝e垯
+ if (phone.isEmpty()) {
+ ToastUtil.showToast(LoginActivity.this, "鎵嬫満鍙蜂笉鑳戒负绌猴紒");
+ return false;
+ }
+// else if (!phone.matches(phonePattern)) {
+// ToastUtil.showToast(LoginActivity.this, "璇疯緭鍏ユ纭墜鏈哄彿锛�");
+// return false;
+// }
+ else {
+ return true;
+ }
+ }
+
+ // 瀵嗙爜鏍¢獙锛氱‘淇濆瘑鐮侀暱搴︾鍚堣姹�
+ private boolean validatePassword(String password) {
+ if (password.isEmpty()) {
+ ToastUtil.showToast(LoginActivity.this, "瀵嗙爜涓嶈兘涓虹┖锛�");
+ return false;
+ }
+// else if (password.length() < 6) {
+// ToastUtil.showToast(LoginActivity.this, "瀵嗙爜涓嶈兘灏戜簬6浣嶏紒");
+// return false;
+// }
+ else {
+ return true;
+ }
+ }
+
+ // 楠岃瘉鐮佹牎楠岋細纭繚楠岃瘉鐮佺鍚堥暱搴﹁姹�
+ private boolean validateCode(String code) {
+ if (code.isEmpty()) {
+ ToastUtil.showToast(LoginActivity.this, "楠岃瘉鐮佷笉鑳戒负绌�");
+ return false;
+ } else {
+ return true;
+ }
+ }
+
}
--
Gitblit v1.8.0