本章节我们来制作中文翻译成英文的实例(运行在HarmonyOS上),通过HTTP去配合API进行实现。 需求分析如下:文字输入HTTP协议使用文字翻译 控件介绍HTTP数据请求官方文档 请求行:代表使用POST或者GET;请求头:主要的一些设定参数;请求体:数据。 场景介绍 应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos。permission。INTERNET权限。 权限申请请参考访问控制(权限)开发指导:https:docs。openharmony。cnpagesv3。2Betazhcnapplicationdevsecurityaccesstokenguidelines。md 涉及的接口如下表,具体的接口说明请参考API文档。https:docs。openharmony。cnpagesv3。2Betazhcnapplicationdevreferenceapisjsapishttp。md 使用例程如下:importhttpfromohos。net。http;每一个httpRequest对应一个http请求任务,不可复用lethttpRequesthttp。createHttp();用于订阅http响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息从API8开始,使用on(headersReceive,Callback)替代on(headerReceive,AsyncCallback)。8httpRequest。on(headersReceive,(header){console。info(header:JSON。stringify(header));});httpRequest。request(填写http请求的url地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定EXAMPLEURL,{method:http。RequestMethod。POST,可选,默认为http。RequestMethod。GET开发者根据自身业务需要添加header字段header:{ContentType:applicationjson},当使用POST请求时此字段用于传递内容extraData:{data:datatosend,},connectTimeout:60000,可选,默认为60sreadTimeout:60000,可选,默认为60s},(err,data){if(!err){data。result为http响应内容,可根据业务需要进行解析console。info(Result:data。result);console。info(code:data。responseCode);data。header为http响应头,可根据业务需要进行解析console。info(header:JSON。stringify(data。header));console。info(cookies:data。cookies);8}else{console。info(error:JSON。stringify(err));该请求不再使用,调用destroy方法主动销毁。httpRequest。destroy();}});输入框官方文档:https:docs。openharmony。cnpagesv3。2Betazhcnapplicationdevreferencearkuitstsbasiccomponentstextinput。md TextInput({placeholder:inputyourword。。。,controller:this。controller})。placeholderColor(Color。Grey)。placeholderFont({size:14,weight:400})。caretColor(Color。Blue)。width(400)。height(40)。margin(20)。fontSize(14)。fontColor(Color。Black)。onChange((value:string){this。textvalue}) UI设计输入框 首先创建变量,作为输入框的控制器,并且创建一个string数组,用来接收输入框中的变量。StateINValue:stringcontroller:TextInputControllernewTextInputController() 此时屏幕中出现一个输入框: 按钮 Button(翻译)。width(60)。height(60)。fontSize(30)显示框 在这里把要输出的幅值给TEXT:Text(this。OutValue)。fontSize(25)。width(80)。height(100)。textAlign(TextAlign。Center)。border({width:1}) 功能设计联网权限 HTTP功能 先把最基本的实现,包括包的导入,基本函数的创建:importhttpfromohos。net。http;每一个httpRequest对应一个http请求任务,不可复用lethttpRequesthttp。createHttp();用于订阅http响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息从API8开始,使用on(headersReceive,Callback)替代on(headerReceive,AsyncCallback)。8httpRequest。on(headersReceive,(header){}); 再编写功能模块:httpRequest。request(填写http请求的url地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定http:fanyi。youdao。comtranslate?doctypejsontypeAUTOithis。INValue,{method:http。RequestMethod。GET,可选,默认为http。RequestMethod。GETconnectTimeout:60000,可选,默认为60sreadTimeout:60000,可选,默认为60s},(err,data){if(!err){data。result为http响应内容,可根据业务需要进行解析varGetReturndata。result。toString()varBeginNumGetReturn。indexOf(tgt:)varLastNumGetReturn。lastIndexOf(})varGetcharGetReturn。substring(BeginNum7,LastNum)console。log(JSON。stringify(Getchar));this。OutValueGetcharconsole。log(helloworld。lastIndexOf(o));}else{该请求不再使用,调用destroy方法主动销毁。httpRequest。destroy();}});数据处理函数substring():console。log(JavaScript。substring(0,4));Javaconsole。log(JavaScript。substring(4))Script 用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。 它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果)不含该位置。indexOf():console。log(helloworld。indexOf(o));4console。log(JavaScript。indexOf(script));1 用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回1,就表示不匹配。lastIndexOf():console。log(helloworld。lastIndexOf(o));7 从尾部开始遇到的第一次出现的位置,这个位置的返回结果是从左边开始算起,而不是从右边开始算起。 程序验证 如上图所示,已经实现了翻译功能,在下个章节会加入翻译后发音功能。