自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

拋棄床的溫暖,只為了它丨云庫(kù)一款跑在鴻蒙系統(tǒng)上的應(yīng)用

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[380860]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

前文再續(xù),章節(jié)上篇。

在篇一,對(duì)整個(gè)項(xiàng)目要做什么,達(dá)到什么樣的效果等做了簡(jiǎn)單的分析。本節(jié)將從服務(wù)端API約定、登錄(沒(méi)有注冊(cè),登錄即注冊(cè))流程、長(zhǎng)連接、華為云對(duì)象存儲(chǔ)OBS基本概念介紹等對(duì)整個(gè)項(xiàng)目的技術(shù)層面做詳細(xì)的介紹。

本節(jié)內(nèi)容摘要:

1、約定服務(wù)端API返回結(jié)構(gòu)

2、登錄流程

3、華為云對(duì)象存儲(chǔ)OBS介紹

4、HAP輸入手機(jī)號(hào)獲取驗(yàn)證碼

約定服務(wù)端API返回結(jié)構(gòu) 

封裝一個(gè)好的返回結(jié)構(gòu),使得我們?cè)谔幚頂?shù)據(jù)的時(shí)候能夠減少各種拆解。因此在初期搭建完服務(wù)端項(xiàng)目后,首要做的是封裝一套合理的返回?cái)?shù)據(jù)結(jié)構(gòu),使API返回結(jié)構(gòu)體大體相似。

1)使用Java Enum枚舉類,將公用的返回錯(cuò)誤進(jìn)行封裝,比如請(qǐng)求接口成功,請(qǐng)求接口失敗,登錄驗(yàn)證成功等等。 

  1. package com.ming.harmonyos.photokit.conf; 
  2.  
  3. /** 
  4.  * 枚舉類對(duì)象 
  5.  */ 
  6. public enum StatusCode { 
  7.  
  8.     //公共 
  9.     SUCCESS(200, "成功"), 
  10.     FAILED(9999, "失敗"), 
  11.     UNKNOWN_ERROR(9998, "未知異常"), 
  12.     SYSTEM_ERROR(9997, "系統(tǒng)異常"), 
  13.  
  14.     REQUEST_PARAMETER_ERROR(1001, "請(qǐng)求參數(shù)錯(cuò)誤"), 
  15.     REQUEST_ACCESS_TOKEN_ERROR(1002, "請(qǐng)求參數(shù)token值錯(cuò)誤"), 
  16.  
  17.     //手機(jī)號(hào)校驗(yàn) 
  18.     CHECK_CELL_PHONE_NUM_ERROR(2001, "手機(jī)號(hào)碼輸入錯(cuò)誤"), 
  19.     LOGIN_VALID_CODE_ERROR(2002, "登錄驗(yàn)證碼錯(cuò)誤"), 
  20.     LOGOUT_ERROR(2003, "退出失敗"), 
  21.     LOGOUT_AUTH_ERROR(2004, "退出失敗,token不存在"); 
  22.  
  23.     /** 
  24.      * 狀態(tài)碼 
  25.      */ 
  26.     private int code; 
  27.  
  28.     /** 
  29.      * 狀態(tài)消息 
  30.      */ 
  31.     private String message; 
  32.  
  33.     StatusCode(int code, String message) { 
  34.         this.code = code; 
  35.         this.message = message; 
  36.     } 
  37.  
  38.     public int getCode() { 
  39.         return code; 
  40.     } 
  41.  
  42.     public String getMessage() { 
  43.         return message; 
  44.     } 

 2)、封裝一套API返回的數(shù)據(jù)結(jié)構(gòu)

我目前使用的有兩種,一種是以true|false做請(qǐng)求狀態(tài),另一種是以數(shù)字的形式做請(qǐng)求狀態(tài)。兩種各有千秋,第一種相對(duì)第二種的話要做到具體的異常定位需要在返回消息中加入異常碼。本項(xiàng)目只是簡(jiǎn)單的示例項(xiàng)目,因此我選擇第二種,這種方便控制。 

  1. package com.ming.harmonyos.photokit.conf; 
  2.  
  3. import lombok.Data; 
  4.  
  5. import java.io.Serializable
  6.  
  7. /** 
  8.  * 返回結(jié)果類統(tǒng)一封裝 
  9.  */ 
  10. @Data 
  11. public class ApiResultInfo<T> implements Serializable { 
  12.  
  13.     /** 
  14.      * 狀態(tài)碼 
  15.      */ 
  16.     private Integer code; 
  17.     /** 
  18.      * 消息 
  19.      */ 
  20.     private String message; 
  21.  
  22.     /** 
  23.      * 數(shù)據(jù)對(duì)象 
  24.      */ 
  25.     private T data; 
  26.  
  27.     public ApiResultInfo() { 
  28.     } 
  29.  
  30.     public ApiResultInfo(Integer code, String message, T data) { 
  31.         this(); 
  32.         setCode(code); 
  33.         setMessage(message); 
  34.         setData(data); 
  35.     } 
  36.  
  37.     public static <T> ApiResultInfo<T> getFailedInstant(Integer code, String message, T data) { 
  38.         return new ApiResultInfo<>(code, message, data); 
  39.     } 
  40.  
  41.     public static <T> ApiResultInfo<T> getInstant(T data) { 
  42.         return new ApiResultInfo<>(StatusCode.SUCCESS.getCode(), 
  43.                 StatusCode.SUCCESS.getMessage(), data); 
  44.     } 

3)示例接口

這里只是一個(gè)登錄(同時(shí)也是注冊(cè))接口,其他接口暫時(shí)未公開(kāi)。

接口信息 

  1. 接口地址:http://xxx/yunku/login.do  
  2. 請(qǐng)求示例:http://xxx/yunku/login.do  
  3. 支持協(xié)議:HTTP/HTTPS  
  4. 請(qǐng)求方式:POST  
  5. 返回格式:UTF8 JSON 

請(qǐng)求參數(shù) 

 

返回示例 

  1.     "code": 200, 
  2.     "msg""success"
  3.     "data": { 
  4.         "authCode""xxxxxx"
  5.         "userInfo": { 
  6.             "iId": 1, 
  7.             "sPhone""13800000000"
  8.             "sNickName""yx_13800000000"
  9.            "sPath""http://xxxx/yx_default.png"
  10.            "dVolume": 20, 
  11.            "dUsedVolume": 5, 
  12.            "tEdit""2021-01-20"  
  13.         } 
  14.     } 

 返回參數(shù) 

 

登錄流程

登錄即注冊(cè),用戶第一次登錄,驗(yàn)證通過(guò)后將用戶信息以key-value的形式存入到Redis緩存中。如果是再次登錄則存入新值,用戶緩存有效期7天。  

 

華為云對(duì)象存儲(chǔ)OBS介紹

對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,OBS)提供海量、安全、高可靠、低成本的數(shù)據(jù)存儲(chǔ)能力,可供用戶存儲(chǔ)任意類型和大小的數(shù)據(jù)。適合企業(yè)備份/歸檔、視頻點(diǎn)播、視頻監(jiān)控等多種數(shù)據(jù)存儲(chǔ)場(chǎng)景。我們這里只是用于存儲(chǔ)多媒體文件。

對(duì)于現(xiàn)階段,我們只需要了解OBS的桶、對(duì)象兩個(gè)概念。桶是存儲(chǔ)對(duì)象的容器,對(duì)象是數(shù)據(jù)存儲(chǔ)的基本單位。可以對(duì)應(yīng)我們系統(tǒng)的文件管理來(lái)看,桶相當(dāng)于磁盤(pán),比如D盤(pán),在D盤(pán)根目錄下只能存在一個(gè)同類型的文件,而對(duì)象就相當(dāng)于文件夾中的文件。

而云庫(kù)中,用于可以通過(guò)HAP創(chuàng)建多個(gè)云庫(kù)(桶),在云庫(kù)中上傳多媒體文件。

HAP輸入手機(jī)號(hào)獲取驗(yàn)證碼

這也是云庫(kù)HAP的主頁(yè)面,啟動(dòng)云庫(kù)HAP后,進(jìn)入應(yīng)用首先看到的界面。對(duì)于登錄頁(yè)面,大體都是一樣的,錄入框和交互按鈕是頁(yè)面主要呈現(xiàn)的組件,額外會(huì)添加一些Image和Text組件,這里我們僅使用下表中羅列的組件來(lái)構(gòu)建頁(yè)面。 

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DependentLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:background_element="#FFFFFF"
  7.     <Image 
  8.         ohos:id="$+id:logo" 
  9.         ohos:height="100vp" 
  10.         ohos:width="100vp" 
  11.         ohos:image_src="$media:logo" 
  12.         ohos:horizontal_center="true"/> 
  13.  
  14.     <Text 
  15.         ohos:id="$+id:hello" 
  16.         ohos:height="match_content" 
  17.         ohos:width="match_content" 
  18.         ohos:text="歡迎走近云庫(kù)" 
  19.         ohos:top_margin="40vp" 
  20.         ohos:left_margin="20vp" 
  21.         ohos:right_margin="20vp" 
  22.         ohos:text_size="30fp" 
  23.         ohos:below="$+id:logo"/> 
  24.  
  25.     <TextField 
  26.         ohos:id="$+id:phoneNum" 
  27.         ohos:height="match_content" 
  28.         ohos:width="match_parent" 
  29.         ohos:hint="請(qǐng)輸入手機(jī)號(hào)..." 
  30.         ohos:text_size="20fp" 
  31.         ohos:text_alignment="vertical_center" 
  32.         ohos:top_margin="10vp" 
  33.         ohos:left_margin="20vp" 
  34.         ohos:right_margin="20vp" 
  35.         ohos:top_padding="16vp" 
  36.         ohos:bottom_padding="16vp" 
  37.         ohos:basement="#E1E1D2" 
  38.         ohos:text_input_type="pattern_number" 
  39.         ohos:below="$+id:hello"/> 
  40.  
  41.     <Button 
  42.         ohos:id="$+id:get_valid_code_btn" 
  43.         ohos:height="match_content" 
  44.         ohos:width="match_parent" 
  45.         ohos:text="獲取驗(yàn)證碼" 
  46.         ohos:text_size="20fp" 
  47.         ohos:bottom_margin="20vp" 
  48.         ohos:left_margin="20vp" 
  49.         ohos:right_margin="20vp" 
  50.         ohos:top_padding="12vp" 
  51.         ohos:bottom_padding="12vp" 
  52.         ohos:align_parent_bottom="true" 
  53.         ohos:text_color="#F2F2F2" 
  54.         ohos:background_element="$graphic:background_disabled"/> 
  55.  
  56. </DependentLayout> 

 

  1. Button button = (Button) findComponentById(ResourceTable.Id_get_valid_code_btn); 
  2. TextField inputPhoneNum = (TextField) findComponentById(ResourceTable.Id_phoneNum); 
  3. inputPhoneNum.setTextInputType(InputAttribute.PATTERN_NUMBER); 
  4. inputPhoneNum.addTextObserver(new Text.TextObserver() { 
  5.     @Override 
  6.     public void onTextUpdated(String s, int i, int i1, int i2) { 
  7.         if (s.length() == 11) { 
  8.             //TODO 判斷是否輸入的是正確的手機(jī)號(hào), 排除輸入漢字、標(biāo)點(diǎn)符號(hào)、英文字母等不是數(shù)字情況 
  9.             ShapeElement shapeElement = new ShapeElement(getContext(), ResourceTable.Graphic_background_login); 
  10.             button.setBackground(shapeElement); 
  11.             button.setClickable(true); 
  12.         } else { 
  13.             ShapeElement shapeElement = new ShapeElement(getContext(), ResourceTable.Graphic_background_disabled); 
  14.             button.setBackground(shapeElement); 
  15.             button.setClickable(false); 
  16.         } 
  17.     } 
  18. }); 
  19.  
  20. button.setClickedListener(l -> { 
  21.     if (l.isClickable()) { 
  22.         //TODO 執(zhí)行獲取驗(yàn)證碼接口,返回?cái)?shù)據(jù)成功后跳轉(zhuǎn)到驗(yàn)證碼輸入頁(yè)面 
  23.     } 
  24. }); 

由于后端程序還未部署到服務(wù)器上,這里接口調(diào)用暫時(shí)還未編寫(xiě)。后續(xù)整個(gè)項(xiàng)目公開(kāi)后,可以查看具體源碼,敬請(qǐng)期待!!!

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz 

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-01-29 15:47:21

鴻蒙HarmonyOS云庫(kù)

2021-01-07 11:32:43

鴻蒙HarmonyOS計(jì)算器

2023-10-06 14:27:10

Linux系統(tǒng)監(jiān)控

2024-08-16 08:31:05

2011-09-19 14:45:18

iPhone應(yīng)用軟件Doxo

2015-07-30 09:42:35

云計(jì)算云服務(wù)iBM

2013-12-18 17:16:29

2018-07-23 14:46:28

辦公電話

2014-01-13 15:00:51

InxiLinux硬件

2011-09-19 11:07:20

iPhone應(yīng)用CardFlick

2022-02-25 14:57:33

harmonyOSjava心形動(dòng)畫(huà)

2010-03-04 09:25:48

Ubuntu VMwa

2014-06-27 14:53:06

應(yīng)用App產(chǎn)品

2013-11-26 10:51:08

開(kāi)發(fā)應(yīng)用創(chuàng)業(yè)移動(dòng)應(yīng)用

2012-04-28 10:57:27

Metro UI

2011-09-08 17:31:29

Steply社交圖片

2021-08-31 07:54:23

數(shù)據(jù)庫(kù)選型

2011-09-16 13:44:19

Android應(yīng)用我要搜APP

2018-09-10 13:55:19

2011-09-19 11:18:21

iPhone應(yīng)用3do提醒應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)