日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java

發布時間:2025/3/12 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

除輕量級智能穿戴設備,現鴻蒙支持的手機、汽車、TV、手表、平板等屬于富鴻蒙,在JS語言的項目中也有Java模塊,并提供了JS跨語言調用Java方法的技術。現需要實現查看商品評論時,統計出長評、中評和短評的比例,這里將評論數據請求來后調用Java進行計算。

JS調用Java有Ability方式和Internal Ability方式兩種,前者可以被不同的JS方法調用,后者適用于與JS業務邏輯關聯性強,響應時延要求高的服務。這里采用Ability的方式。

1、新建一個Service Ability

在項目工程目錄Java模塊中,右鍵項目的包,New->Ability->Empty Service Ability。

在自動生成的眾多重載方法中,我們需要用到的是onConnect()。此方法在首次連接時回調,并返回IRemoteObject對象,用于后續的業務通信。

因此創建一個內部類,繼承RemoteObject類并實現IRemoteBroker接口。代碼框架如下:

publicclass?ServiceAbility?extends?Ability?{

private?MyRemote?remote?=?new?MyRemote();

@Override

publicIRemoteObject?onConnect(Intent?intent)?{

super.onConnect(intent);

returnremote.asObject();

}

staticclass?MyRemote?extends?RemoteObject?implements?IRemoteBroker?{

MyRemote()?{

super("MyService_MyRemote");

}

MyRemote(String?descriptor)?{

super(descriptor);

}

@Override

publicboolean?onRemoteRequest(intcode,?MessageParcel?data,?MessageParcel?reply,?MessageOptionoption)?{

......

}

@Override

publicIRemoteObject?asObject()?{

returnthis;

}

}

}

主要需實現的兩個方法是onRemoteRequest()和asObject()。在onConnect()方法中返回內部類的示例,asObject()直接返回this即可。onRemoteRequest()是主要需要實現的業務方法,有四個參數:

code:JS端請求時帶來的請求碼,可根據code進行不同的業務處理。

data:JS端請求時帶來的數據,目前僅支持json格式。Java端通過data.readString()獲取請求json字符串。

reply:Java端返回給JS端的數據,目前僅支持String格式,通過reply.writeString(str)寫入返回數據。

option:JS端指定同步或異步方式,Java端通過option.getFlag()獲取。

2、完善代碼邏輯

規定JS端每分頁加載一次評論數據,就將目前頁面中的所有評論內容發送給Java端進行計算。流程和HTTP有一點類似,獲取數據、處理數據、返回數據。鴻蒙提供了ZSONObject可供處理json,完整邏輯代碼如下:

publicclass?ServiceAbility?extends?Ability?{

private?MyRemote?remote?=?new?MyRemote();

@Override

publicIRemoteObject?onConnect(Intent?intent)?{

super.onConnect(intent);

returnremote.asObject();

}

staticclass?MyRemote?extends?RemoteObject?implements?IRemoteBroker?{

private?staticfinalintLIST_COMMENTS?=?200;

private?staticfinalintSUCCESS?=?0;

private?staticfinalintERROR?=?500;

MyRemote()?{

super("MyService_MyRemote");

}

MyRemote(String?descriptor)?{

super(descriptor);

}

@Override

publicboolean?onRemoteRequest(intcode,?MessageParcel?data,?MessageParcel?reply,?MessageOptionoption)?{

Map?result?=?new?HashMap<>(5);

if?(code?==?LIST_COMMENTS)?{

//?獲取并轉化請求數據

String?req?=?data.readString();

WordReq?param?=?ZSONObject.stringToClass(req,?WordReq.class);

List?comments?=?param.getList().stream().filter(e?->?!"用戶未填寫評價內容".equals(e)).collect(Collectors.toList());

//?統計評論字數

intlongComments?=?(int)?comments.stream().mapToInt(String::length).filter(len?->?len?>=?200).count();

intmediumComments?=?(int)?comments.stream().mapToInt(String::length).filter(len?->?len?>=?30?&&?len?

intshortComments?=?(int)?comments.stream().mapToInt(String::length).filter(len?->?len?

//?計算占比

DecimalFormat?df?=?new?DecimalFormat("#.00");

doublelongPer?=?1.0?*?longComments?/?comments.size()?*?100;

doublemediumPer?=?1.0?*?mediumComments?/?comments.size()?*?100;

doubleshortPer?=?1.0?*?shortComments?/?comments.size()?*?100;

//?返回結果

result.put("long",?df.format(longPer)?+"%");

result.put("medium",?df.format(mediumPer)?+"%");

result.put("short",?df.format(shortPer)?+"%");

result.put("code",?SUCCESS);

result.put("msg","ok");

reply.writeString(ZSONObject.toZSONString(result));

returntrue;

}?else{

result.put("code",?ERROR);

result.put("msg","invalid?code");

reply.writeString(ZSONObject.toZSONString(result));

returnfalse;

}

}

@Override

publicIRemoteObject?asObject()?{

returnthis;

}

}

}

3、JS端遠程調用

Java服務部分寫好了,在JS中,鴻蒙提供了FeatureAbility.callAbility()方法用于單次請求Java服務。其參數如下:

bundleName:Ability包名,在config.json中,為app.bundleName。

abilityName:調用服務端Ability類名,可省略包名,直接寫".XxxAbility"。

messageCode:操作碼,和Java端的"code"參數相匹配。

abilityType:Ability類型,0為Ability,1為Internal Ability。

data:請求數據,json類型。

syncOption:與Java端"option"相匹配,0為同步方式,1為異步方式。默認同步方式。

方法返回一個Promise對象,可通過.then()和.catch()處理調用成功和異常。

本例中的方法如下:

//?調用Java統計評論長度

countWords()?{

let?list?=?[];

this.comments.forEach(e?=>?{

list.push(e.content);

})

FeatureAbility.callAbility({

bundleName:?"com.example.litemall",

abilityName:?".ServiceAbility",

messageCode:?200,

abilityType:?0,

data:?{

list

}

}).then(res?=>?{

console.info(res);

let?data?=?JSON.parse(res);

if?(data.code?==?0)?{

this.lengths[0].value?=?data.long;

this.lengths[1].value?=?data.medium;

this.lengths[2].value?=?data.short;

}

}).catch(res?=>?{

console.error(res);

})

}

Java端和JS端的代碼編譯完成并運行,可以看到日志中的返回數據和我們在Java中定義的一致。

運行效果:

但加上Java的部分后,項目編譯的速度明顯變慢了,如下兩步花了很長時間,有沒有大神知道有沒有什么加速的方法?

【編輯推薦】

【責任編輯:jianghua TEL:(010)68476606】

點贊 0

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级片成人 | 亚洲欧洲一区二区三区 | 国产麻豆剧果冻传媒白晶晶 | 国产精品第3页 | 国产精品69毛片高清亚洲 | av在线黄色 | 人人干天天干 | 精产国品一区二区三区 | 91一区二区在线 | 人妻一区在线 | 久久久久伊人 | 国产黄网站 | 国产一区日韩精品 | www.av免费| 日韩欧美久久 | 色偷偷人人澡人人爽人人模 | 五月婷婷六月合 | 在线爱情大片免费观看大全 | 粉嫩av渣男av蜜乳av | av免费观| 国产精品久久久久久久久绿色 | 热热av| 日韩欧美综合在线 | 玩日本老头很兴奋xxxx | 亚洲人妻一区二区三区 | 国产精品视频在 | 久久久久99精品 | 亚洲精品久久视频 | 97视频在线播放 | 网址av| 亚洲乱熟女一区二区三区小说 | 亚洲激情偷拍 | 国产女无套免费视频 | 一区二区亚洲 | 黄色小说在线看 | www.在线视频 | 97看片网| 男女一进一出视频 | 97网站| 久久精品www人人爽人人 | 欧美xxxxxxxxx| 一区二区三区国产精品视频 | 高清亚洲 | 欧美激情视频一区二区三区在线播放 | 大尺度一区二区 | 国产美女网 | 国产成人精品一区二区 | 亚洲图片88| 超碰在线观看91 | 五级黄高潮片90分钟视频 | 国产做爰视频免费播放 | 成人网免费看 | 欧美经典一区二区 | 日本精品一区视频 | 人人91 | 亚洲综合专区 | 日不卡| 日韩欧美黄色 | 亚洲欧美综合色 | 欧美视频在线看 | 日韩欧美在线免费 | 中文字幕一区二区三区5566 | 欧美色综合天天久久综合精品 | 国产麻豆免费视频 | 91福利网站| 日韩毛片网站 | 亚洲午夜18毛片在线看 | 欧美男女交配视频 | 久草新视频 | 亚洲欧美一区二区三区 | 欧美超碰在线观看 | 国产乱真实合集 | 色香五月 | av一区免费 | 日韩精品无码一区二区三区久久久 | 天天爽夜夜爽人人爽 | 天天骑夜夜操 | 色丁香婷婷综合久久 | 亚洲精品视频免费看 | 一区二区三区丝袜 | 超碰碰97 | 国产免费激情视频 | 草碰在线视频 | 一区二区三区 中文字幕 | 色多多视频在线观看 | 强迫凌虐淫辱の牝奴在线观看 | 五月天婷婷激情网 | 台湾无码一区二区 | 成人免费视频免费观看 | 亚洲天堂一区二区三区 | 国产精品国色综合久久 | 亚洲v视频 | 国产精品嫩草影院av蜜臀 | 中文字幕1 | 欧洲视频在线观看 | 欧美一区二区三区电影 | 5566色 | 婷婷五月综合久久中文字幕 | 啪啪网站视频 |