.idea/misc.xml
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" /> </project> app/src/main/AndroidManifest.xml
@@ -7,9 +7,12 @@ android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:name=".HDLApp" app/src/main/java/com/hdl/photovoltaic/bean/LoginBean.java
New file @@ -0,0 +1,177 @@ package com.hdl.photovoltaic.bean; import androidx.annotation.NonNull; import java.io.Serializable; public class LoginBean implements Serializable { /// 用户有效身份Token private String accessToken; /// 用户有效身份Token过期时间 private String expiration; /// 刷新Token private String refreshToken; /// 刷新Token过期时间 private String refreshExpiration; /// 用户唯一ID private String userId; /// 登录帐号 private String account; /// headerPrefix private String headerPrefix; private String tokenUuid; private String tokenType; private String expiresIn; private String refreshExpiresIn; private String userType; private String name; private String userPhone; /// 用户邮箱 private String userEmail; ///企业单位id private String companyId; @NonNull public String getAccessToken() { return accessToken == null ? "" : accessToken; } public void setAccessToken(@NonNull String accessToken) { this.accessToken = accessToken; } @NonNull public String getExpiration() { return expiration == null ? "" : expiration; } public void setExpiration(@NonNull String expiration) { this.expiration = expiration; } @NonNull public String getRefreshToken() { return refreshToken == null ? "" : refreshToken; } public void setRefreshToken(@NonNull String refreshToken) { this.refreshToken = refreshToken; } @NonNull public String getRefreshExpiration() { return refreshExpiration == null ? "" : refreshExpiration; } public void setRefreshExpiration(@NonNull String refreshExpiration) { this.refreshExpiration = refreshExpiration; } @NonNull public String getUserId() { return userId == null ? "" : userId; } public void setUserId(@NonNull String userId) { this.userId = userId; } @NonNull public String getAccount() { return account == null ? "" : account; } public void setAccount(@NonNull String account) { this.account = account; } @NonNull public String getHeaderPrefix() { return headerPrefix == null ? "" : headerPrefix; } public void setHeaderPrefix(@NonNull String headerPrefix) { this.headerPrefix = headerPrefix; } @NonNull public String getTokenUuid() { return tokenUuid == null ? "" : tokenUuid; } public void setTokenUuid(@NonNull String tokenUuid) { this.tokenUuid = tokenUuid; } @NonNull public String getTokenType() { return tokenType == null ? "" : tokenType; } public void setTokenType(@NonNull String tokenType) { this.tokenType = tokenType; } @NonNull public String getExpiresIn() { return expiresIn == null ? "" : expiresIn; } public void setExpiresIn(@NonNull String expiresIn) { this.expiresIn = expiresIn; } @NonNull public String getRefreshExpiresIn() { return refreshExpiresIn == null ? "" : refreshExpiresIn; } public void setRefreshExpiresIn(@NonNull String refreshExpiresIn) { this.refreshExpiresIn = refreshExpiresIn; } @NonNull public String getUserType() { return userType == null ? "" : userType; } public void setUserType(@NonNull String userType) { this.userType = userType; } @NonNull public String getName() { return name == null ? "" : name; } public void setName(@NonNull String name) { this.name = name; } @NonNull public String getUserPhone() { return userPhone == null ? "" : userPhone; } public void setUserPhone(@NonNull String userPhone) { this.userPhone = userPhone; } @NonNull public String getUserEmail() { return userEmail == null ? "" : userEmail; } public void setUserEmail(@NonNull String userEmail) { this.userEmail = userEmail; } @NonNull public String getCompanyId() { return companyId == null ? "" : companyId; } public void setCompanyId(@NonNull String companyId) { this.companyId = companyId; } } app/src/main/java/com/hdl/photovoltaic/bean/LoginUserRegionBean.java
New file @@ -0,0 +1,68 @@ package com.hdl.photovoltaic.bean; import androidx.annotation.NonNull; import java.io.Serializable; public class LoginUserRegionBean implements Serializable { private String regionId;//区域Id private String regionName;//区域名称 private String regionMark; private String regionMqttUrl; private String regionSlbUrl; private String regionUrl;//账号所在区域协议及地址 @NonNull public String getRegionId() { return regionId == null ? "" : regionId; } public void setRegionId(@NonNull String regionId) { this.regionId = regionId; } @NonNull public String getRegionName() { return regionName == null ? "" : regionName; } public void setRegionName(@NonNull String regionName) { this.regionName = regionName; } @NonNull public String getRegionMark() { return regionMark == null ? "" : regionMark; } public void setRegionMark(@NonNull String regionMark) { this.regionMark = regionMark; } @NonNull public String getRegionMqttUrl() { return regionMqttUrl == null ? "" : regionMqttUrl; } public void setRegionMqttUrl(@NonNull String regionMqttUrl) { this.regionMqttUrl = regionMqttUrl; } @NonNull public String getRegionSlbUrl() { return regionSlbUrl == null ? "" : regionSlbUrl; } public void setRegionSlbUrl(@NonNull String regionSlbUrl) { this.regionSlbUrl = regionSlbUrl; } @NonNull public String getRegionUrl() { return regionUrl == null ? "" : regionUrl; } public void setRegionUrl(@NonNull String regionUrl) { this.regionUrl = regionUrl; } } app/src/main/java/com/hdl/photovoltaic/bean/ResponsePack.java
New file @@ -0,0 +1,44 @@ package com.hdl.photovoltaic.bean; import java.io.Serializable; public class ResponsePack implements Serializable { /** * 状态码 */ private String code; /** * 云端状态码的消息 */ private String message; /** * 云端返回的数据 */ private Object data; public String getCode() { return code == null ? "" : code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message.equals("") ? "" : message; } public void setMessage(String message) { this.message = message; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } } app/src/main/java/com/hdl/photovoltaic/config/ConfigManagement.java
New file @@ -0,0 +1,75 @@ package com.hdl.photovoltaic.config; import com.hdl.photovoltaic.BuildConfig; public class ConfigManagement { /*********是否正式服务器*********/ private static final boolean isOnlineServer = true; /*********正式环境*********/ private static final String APP_KEY_ONLINE = "CSZEMDJL"; private static final String APP_SECRET_ONLINE = "CSZEMDKBCSZEMDKR"; private static final String APP_REGIONURL_ONLINE = "https://nearest.hdlcontrol.com"; /*********测试环境*********/ private static final String APP_KEY_TEST = "CTBGMNUV"; private static final String APP_SECRET_TEST = "CTBGMNVLCTBGMNWB"; private static final String APP_REGIONURL_TEST = "https://test-gz.hdlcontrol.com"; /*********获取当前是否使用正式服务器环境*********/ public static boolean isIsOnlineServer() { return isOnlineServer; } /// 用户注册所在服务器域名地址 private static String sUserRegionUrl; public static String getUserRegionUrl() { return sUserRegionUrl == null ? "" : sUserRegionUrl; } public static void setUserRegionUrl(String userRegionUrl) { sUserRegionUrl = userRegionUrl; } /*********getAppKey*********/ public static String getAppKey() { if (isOnlineServer) { return APP_KEY_ONLINE; } else { return APP_KEY_TEST; } } /*********getAppSecret*********/ public static String getAppSecret() { if (isOnlineServer) { return APP_SECRET_ONLINE; } else { return APP_SECRET_TEST; } } /*********getAPP_RegionUrl*********/ public static String getAPPRegionUrl() { if (isOnlineServer) { return APP_REGIONURL_ONLINE; } else { return APP_REGIONURL_TEST; } } /** * 当前是否为调试模式 */ public static boolean isDebug() { return BuildConfig.DEBUG; } /** * 获取当前应用的版本名 */ public static String getVersionName() { return BuildConfig.VERSION_NAME; } } app/src/main/java/com/hdl/photovoltaic/config/UserManagement.java
New file @@ -0,0 +1,5 @@ package com.hdl.photovoltaic.config; public class UserManagement { } app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
@@ -1,4 +1,203 @@ package com.hdl.photovoltaic.internet; import android.net.Uri; import android.text.TextUtils; import androidx.annotation.NonNull; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.hdlhttp.utils.GsonConvert; import com.hdl.photovoltaic.bean.ResponsePack; import com.hdl.photovoltaic.config.ConfigManagement; import com.hdl.photovoltaic.listener.BaseSuccessFailureCallBeak; import com.hdl.photovoltaic.utils.HDLMD5Utils; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class HttpClient { private static volatile HttpClient sHttpClient; public static synchronized HttpClient getInstance() { if (sHttpClient == null) { synchronized (HttpClient.class) { if (sHttpClient == null) { sHttpClient = new HttpClient(); } } } return sHttpClient; } /** * 请求服务器的方法 * * @param requestUrl 请求接口 * @param json 请求数据 * @param isBasicService 是否是基础服务的接口(基础服务的接口需要 appKey,timestamp,sign这三个参数,当为true时,内部会自动添加) * @param isExecute 是否是同步(true=同步,false=异步) */ public void requestHttp(String requestUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) { String fullUrl = ConfigManagement.getUserRegionUrl() + requestUrl; this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak); } /** * 请求服务器的方法(目前只用在获取获取账号区域信息) * * @param fullUrl 绝对地址(地址+接口) * @param json 请求数据 * @param isBasicService 是否是基础服务的接口(基础服务的接口需要 appKey,timestamp,sign这三个参数,当为true时,内部会自动添加) * @param isExecute 是否是同步(true=同步,false=异步) */ public void requestFullHttp(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) { this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak); } /** * 请求服务器的方法 * * @param fullUrl 绝对请求地址 * @param json 请求数据 * @param isBasicService 是否是基础服务的接口(基础服务的接口需要 appKey,timestamp,sign这三个参数,当为true时,内部会自动添加) * @param isExecute 是否是同步(true=同步,false=异步) */ private void requestHttps(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) { new Thread(new Runnable() { @Override public void run() { try { OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), getJson(json)); final Request request = new Request.Builder() .url(fullUrl)//请求的url// .addHeader("Authorization", "accessToken") .post(requestBody) .build(); if (isExecute) { Response response = okHttpClient.newCall(request).execute();//同步 if (response.isSuccessful()) { String s = Objects.requireNonNull(response.body()).string(); ResponsePack responsePack = new Gson().fromJson(s, ResponsePack.class); baseSuccessCallBeak.onSuccess(responsePack); } else { //throw new IOException("Unexpected code " + response); baseSuccessCallBeak.onFailure(new Exception()); } } else { Call call = okHttpClient.newCall(request); call.enqueue(new Callback() {//异步 @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { System.out.println("失败" + e.toString()); } @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { System.out.println("url连接信息" + response.code()); if (response.code() == 200) { String s = Objects.requireNonNull(response.body()).string(); ResponsePack responsePack = new Gson().fromJson(s, ResponsePack.class); baseSuccessCallBeak.onSuccess(responsePack); } else { baseSuccessCallBeak.onFailure(new Exception()); } } }); } } catch (Exception e) { baseSuccessCallBeak.onFailure(e); } } }).start(); } /** * 添加sign字段 */ private String getJson(String json) { final String timestamp = String.valueOf(System.currentTimeMillis()); final String appKey = ConfigManagement.getAppKey(); final String appSecret = ConfigManagement.getAppSecret(); JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class); if (jsonObject == null) { jsonObject = new JsonObject(); } jsonObject.addProperty("appKey", appKey); jsonObject.addProperty("timestamp", timestamp); jsonObject.addProperty("sign", getSign(jsonObject, appSecret)); return jsonObject.toString(); } /** * 需要按字母排序 * * @param json 所有字段使用urlParameter拼接,除了appSecret */ private String getSign(JsonObject json, String appSecret) { String builder = jsonToUrlParameter(json) + appSecret; return HDLMD5Utils.encodeMD5(builder); } private String jsonToUrlParameter(JsonObject object) { final Map<String, String> map = GsonConvert.getGson().fromJson(object, new TypeToken<Map<String, String>>() { }.getType()); final Uri.Builder builder = new Uri.Builder(); List<String> list = new ArrayList<>(map.keySet()); Collections.sort(list); for (String key : list) { //判断当前值是否需要参与签名,保持跟云端一致 if (IfValueNeedSign(map.get(key))) { builder.appendQueryParameter(key, map.get(key)); // HDLSDKLog.e("要签名:" + key + " :" + map.get(key)); } else { // HDLSDKLog.e("不需要签名:" + key + " :" + map.get(key)); } } return builder.build().getQuery(); } /** * 判断当前值是否需要参与签名,保持跟云端一致 * 空字符串不参与 * 数组,集合,对象不参与 * * @param valueStr - * @return - */ private boolean IfValueNeedSign(String valueStr) { if (TextUtils.isEmpty(valueStr)) return false; final char[] strChar = valueStr.substring(0, 1).toCharArray(); final char firstChar = strChar[0]; //System.out.println("getJSONType firstChar = "+firstChar); if (firstChar != '{' && firstChar != '[') return true; return false; } } app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -7,7 +7,7 @@ //登录接口 public static final String POST_Login = "/smart-footstone/user/oauth/login"; //发送消息验证码 public static final String POST_VERIFICATION_CODE_SEND= "/smart-footstone/verification/message/send"; public static final String POST_VERIFICATION_CODE_SEND = "/smart-footstone/verification/message/send"; //用户找回密码 忘记密码,通过邮箱和手机号找回 public static final String POST_FORGET_PROGRAM_PWD = "/smart-footstone/user/oauth/forgetProgramPwd"; //更改个人密码 @@ -15,7 +15,7 @@ //获取员工列表 public static final String POST_GET_USER_LIST = "/smart-footstone/user/userInfo/getUserList"; //获取用户个人信息 C端 public static final String POST_GET_MEMBER_INFO= "/smart-footstone/member/memberInfo/getMemberInfo"; public static final String POST_GET_MEMBER_INFO = "/smart-footstone/member/memberInfo/getMemberInfo"; //更新个人信息 C端 public static final String POST_UPDATE_MEMBER_INFO = "/smart-footstone/member/memberInfo/updateMemberInfo"; //上传图片 app/src/main/java/com/hdl/photovoltaic/listener/BaseFailureCallBack.java
New file @@ -0,0 +1,8 @@ package com.hdl.photovoltaic.listener; public interface BaseFailureCallBack { /** * 失败 */ void onFailure(Exception exception); } app/src/main/java/com/hdl/photovoltaic/listener/BaseSuccessFailureCallBeak.java
New file @@ -0,0 +1,11 @@ package com.hdl.photovoltaic.listener; import com.hdl.photovoltaic.bean.ResponsePack; public interface BaseSuccessFailureCallBeak extends BaseFailureCallBack { /** * 成功回调 */ void onSuccess(ResponsePack responsePack); } app/src/main/java/com/hdl/photovoltaic/listener/CloudCallBeak.java
New file @@ -0,0 +1,9 @@ package com.hdl.photovoltaic.listener; public interface CloudCallBeak<T> extends BaseFailureCallBack { /** * 成功回调 */ void onSuccess(T obj); } app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
@@ -1,6 +1,20 @@ package com.hdl.photovoltaic.other; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.hdl.photovoltaic.bean.LoginBean; import com.hdl.photovoltaic.bean.LoginUserRegionBean; import com.hdl.photovoltaic.bean.ResponsePack; import com.hdl.photovoltaic.config.ConfigManagement; import com.hdl.photovoltaic.internet.HttpClient; import com.hdl.photovoltaic.internet.api.HttpApi; import com.hdl.photovoltaic.listener.BaseSuccessFailureCallBeak; import com.hdl.photovoltaic.listener.CloudCallBeak; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 登陆界面的逻辑 */ @@ -22,55 +36,89 @@ /** * 初始化账号的Url区域地址(可能状态码:Sucess NotAccount NotNetWork) * 初始化账号的Url区域地址(可能状态码:Success NotAccount NotNetWork) * * @param i_account * @return * @param i_account 账号 */ private void InitAccoutRegionInfo(String i_account) { // String regionUrl = this.GetAccoutRegionInfo(i_account); // // // if (regionUrl == null) { // return AccountStatu.NotNetWork; // } // if (regionUrl == string.Empty) { // return AccountStatu.NotAccount; // } // // return AccountStatu.Sucess; public void regionByAccount(String i_account, CloudCallBeak<LoginUserRegionBean> cloudCallBeak) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("account", i_account); String full = ConfigManagement.getAPPRegionUrl() + HttpApi.POST_RegionByUserAccount; HttpClient.getInstance().requestFullHttp(full, jsonObject.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(ResponsePack responsePack) { if (responsePack.getData() != null) { Gson gson = new Gson(); String json = gson.toJson(responsePack.getData()); LoginUserRegionBean loginUserRegionBean = new Gson().fromJson(json, LoginUserRegionBean.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(loginUserRegionBean); } else { cloudCallBeak.onFailure(new Exception()); } } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } /** * 获取账号所在区域 * 登录 * 通过账号和密码 * * @param account * @param callBack * @return https://nearest.hdlcontrol.com/smart-footstone/region/regionByUserAccount * @param account 手机或者邮箱 * @param loginPwd 密码 * @param cloudCallBeak - */ // public Disposable regionByAccount(String account, IRegionByAccountCallBack callBack) { // String requestUrl = HDLLinkPMSdk.getInitUrl() + HttpApi.POST_RegionByUserAccount; // return HxHttp.builder() // .url(requestUrl) // .params("account", account) // .build() // .post() // .subscribeWith(new HDLResponse<HDLUserRegionBean>() { // @Override // public void onResponse(HDLUserRegionBean response) { // if (callBack != null) { // callBack.onSuccess(response); // } // } // // @Override // public void onFailure(HDLException e) { // HDLExceptionSubmitUtils.submit(requestUrl, account, e); // if (callBack != null) { // callBack.onFailure(e); // } // } // }); public void loginByPassword(String account, String loginPwd, CloudCallBeak<LoginBean> cloudCallBeak) { String requestUrl = HttpApi.POST_Login; JsonObject json = new JsonObject(); json.addProperty("account", account); json.addProperty("loginPwd", loginPwd); // json.addProperty("platform", "APP"); json.addProperty("grantType", "password"); // } HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() { @Override public void onSuccess(ResponsePack responsePack) { if (responsePack.getData() != null) { Gson gson = new Gson(); String json = gson.toJson(responsePack.getData()); LoginBean loginBean = new Gson().fromJson(json, LoginBean.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(loginBean); } else { cloudCallBeak.onFailure(new Exception()); } } } @Override public void onFailure(Exception exception) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(exception); } } }); } public boolean isPhone(String phone) { Pattern p = Pattern.compile("^((13[0-9])|(14[0|5|6|7|9])|(15[0-3])|(15[5-9])|(16[6|7])|(17[2|3|5|6|7|8])|(18[0-9])|(19[1|8|9]))\\d{8}$"); Matcher m = p.matcher(phone); return m.matches(); } public boolean isMailbox(String mailbox) { String regex = "^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$"; return mailbox.matches(regex); } } app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
File was renamed from app/src/main/java/com/hdl/photovoltaic/utils/FileUtils.java @@ -1,42 +1,53 @@ package com.hdl.photovoltaic.utils; package com.hdl.photovoltaic.other; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.HDLApp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.Objects; public class HdlFileLogic { public class FileUtils { private static volatile HdlFileLogic sHdlFileLogic; public static synchronized HdlFileLogic getInstance() { if (sHdlFileLogic == null) { synchronized (HdlFileLogic.class) { if (sHdlFileLogic == null) { sHdlFileLogic = new HdlFileLogic(); } } } return sHdlFileLogic; } private static final String TAG = "FileUtils"; public static final String userId = ""; /** * 获取内部存储文件路径 * * @param context 上下文 * @return - */ public static String getInternalStoreFilesPath(Context context) { if (context == null) { return ""; } return context.getFilesDir().getAbsolutePath(); private String getInternalStoreFilesPath() { return HDLApp.getInstance().getFilesDir().getAbsolutePath(); } public static File createFile(String dirPath, String fileName) { /** * 获取App存放文件的根路径 */ public String getAppFilesPath() { return HDLApp.getInstance().getFilesDir().getAbsolutePath() + userId + "/home"; } public File createFile(String dirPath, String fileName) { try { File dirFile = new File(dirPath); if (!dirFile.exists()) { @@ -71,7 +82,7 @@ /** * 创建文件夹---之所以要一层层创建,是因为一次性创建多层文件夹可能会失败! */ public static boolean createFileDir(File dirFile) { public boolean createFileDir(File dirFile) { if (dirFile == null) { return true; } @@ -92,7 +103,7 @@ } } public static void writeFile(String path, String data) { public void writeFile(String path, String data) { try { File file = new File(path); if (!file.exists()) { @@ -111,7 +122,7 @@ } public static String readFile(String filepath) { public String readFile(String filepath) { try { String fileContent = ""; if (null == filepath) { @@ -140,7 +151,7 @@ /** * 把位图数据保存到指定路径的图片文件 */ public static void writeImage(String path, Bitmap bitmap) { public void writeImage(String path, Bitmap bitmap) { try { //根据指定文件路径构建缓存输出流对象 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path)); @@ -159,7 +170,7 @@ /** * 从指定路径的图片文件中读取位图数据 */ public static Bitmap readImage(String path) { public Bitmap readImage(String path) { try { //根据指定文件路径构建缓存输入流对象 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path)); @@ -174,8 +185,4 @@ } return null; } } app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -2,7 +2,6 @@ import android.os.Bundle; import android.os.SystemClock; import android.text.Editable; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -13,8 +12,6 @@ import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.View; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.TextView; @@ -22,9 +19,11 @@ import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.bean.LoginUserRegionBean; import com.hdl.photovoltaic.config.ConfigManagement; import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding; import com.hdl.photovoltaic.ui.MyPowerStationActivity; import com.hdl.photovoltaic.utils.FileUtils; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlAccountLogic; public class HomeLoginActivity extends CustomBaseActivity { @@ -160,7 +159,18 @@ viewBinding.homeLoginExperienceTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(MyPowerStationActivity.class); // startActivity(MyPowerStationActivity.class); HdlAccountLogic.getInstance().regionByAccount("18402017839", new CloudCallBeak<LoginUserRegionBean>() { @Override public void onSuccess(LoginUserRegionBean obj) { ConfigManagement.setUserRegionUrl(obj.getRegionUrl()); } @Override public void onFailure(Exception exception) { } }); } }); app/src/main/java/com/hdl/photovoltaic/utils/HDLMD5Utils.java
New file @@ -0,0 +1,177 @@ package com.hdl.photovoltaic.utils; import java.io.File; import java.io.FileInputStream; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class HDLMD5Utils { /** * MD5转字符串 */ public static String encodeMD5(String s) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(s.getBytes(StandardCharsets.UTF_8)); byte[] messageDigest = digest.digest(); return toHexString(messageDigest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } private static String toHexString(byte[] keyData) { if (keyData == null) { return null; } int expectedStringLen = keyData.length * 2; StringBuilder sb = new StringBuilder(expectedStringLen); for (byte keyDatum : keyData) { String hexStr = Integer.toString(keyDatum & 0x00FF, 16); if (hexStr.length() == 1) { hexStr = "0" + hexStr; } sb.append(hexStr); } return sb.toString(); } /** * MD5转字符串 * 额外值 */ public static String encodeMD52(String s) { char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { byte[] btInput = s.getBytes(StandardCharsets.UTF_8); MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(btInput); byte[] md = digest.digest(); int j = md.length; char[] str = new char[j * 2]; int k = 0; for (byte byte0 : md) { str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } } /** * MD5文件转字符串 */ public static String encodeMD5(File f) { if (!f.isFile()) { return null; } MessageDigest digest; byte[] buffer = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); FileInputStream in = new FileInputStream(f); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } /** * MD5文件转字符串 */ public static String encodeMD5(byte[] f) { MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); digest.update(f); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } public final static String md5(String plainText) { // 返回字符串 String md5Str = null; try { // 操作字符串 StringBuffer buf = new StringBuffer(); MessageDigest md = MessageDigest.getInstance("MD5"); // 添加要进行计算摘要的信息,使用 plainText 的 byte md.update(plainText.getBytes()); // 计算出摘要,完成哈希计算。 byte b[] = md.digest(); int i; for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) { i += 256; } if (i < 16) { buf.append("0"); } // 将整型 十进制 i buf.append(Integer.toHexString(i)); } // 32位的加密 md5Str = buf.toString(); // 16位的加密 // md5Str = buf.toString().md5Strstring(8,24); } catch (Exception e) { e.printStackTrace(); } return md5Str; } }