harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)_第1頁
harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)_第2頁
harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)_第3頁
harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)_第4頁
harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、HarmonyOS應(yīng)用開發(fā)數(shù)據(jù)交互-使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)通過學(xué)習(xí)官方案例 HYPERLINK /openharmony/app_samples/tree/master/network/NetworkManagement t /cn/docs/documentation/doc-guides/_blank NetworkManagement,對Harmony使用指定網(wǎng)絡(luò)訪問數(shù)據(jù)有了一定了解,和大家簡單分享。一、相關(guān)接口:類名接口名功能描述NetSpecifierBuilder()創(chuàng)建一個指定網(wǎng)絡(luò)實例。NetManagersetupSpecificNet(NetSpecifier netSpeci

2、fier, NetStatusCallback callback)建立指定的數(shù)據(jù)網(wǎng)絡(luò)。removeNetStatusCallback(NetStatusCallback callback)停止獲取數(shù)據(jù)網(wǎng)絡(luò)狀態(tài)。NetManagergetInstance(Context context)獲取網(wǎng)絡(luò)管理的實例對象。hasDefaultNet()查詢當(dāng)前是否有默認(rèn)可用的數(shù)據(jù)網(wǎng)絡(luò)。getDefaultNet()獲取當(dāng)前默認(rèn)的數(shù)據(jù)網(wǎng)絡(luò)句柄。addDefaultNetStatusCallback(NetStatusCallback callback)獲取當(dāng)前默認(rèn)的數(shù)據(jù)網(wǎng)絡(luò)狀態(tài)變化。setAppNet(Net

3、Handle netHandle)應(yīng)用綁定該數(shù)據(jù)網(wǎng)絡(luò)。NetHandleopenConnection(URL url, .Proxy proxy) throws IOException使用該網(wǎng)絡(luò)打開一個URL鏈接。數(shù)據(jù)訪問步驟:1 使用NetManager對象獲取網(wǎng)路實例和網(wǎng)絡(luò)狀態(tài)2 利用NetManager對象獲取NetHandle對象3 使用NetHandle對象指明連接代理和url,用URLConnection對象接收4 connection = (HttpURLConnection) urlConnection5 使用connection指定連接方式,并進行連接6 獲取數(shù)據(jù),urlCo

4、nnection.getInputStream()7 輸出數(shù)據(jù),outputStream.toByteArray()二、關(guān)鍵代碼public class NetRequestSlice extends AbilitySlice private static final String TAG = NetRequestSlice.class.getSimpleName(); private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0 xD000F00, TAG); private long rx; private long tx;

5、 private Text inputText; private Text outText; private NetManager netManager; private Text statisticsText; Override public void onStart(Intent intent) super.onStart(intent); super.setUIContent(ResourceTable.Layout_net_request_slice); initComponents(); /* * 初始化組件 */ private void initComponents() Comp

6、onent startButton = findComponentById(ResourceTable.Id_start_button); inputText = (Text) findComponentById(ResourceTable.Id_input_text); outText = (Text) findComponentById(ResourceTable.Id_out_text); statisticsText = (Text) findComponentById(ResourceTable.Id_statistics_text); startButton.setClickedL

7、istener(this:netRequest); /* * 1 使用NetManager對象獲取網(wǎng)路實例和網(wǎng)絡(luò)狀態(tài) * 2 利用NetManager對象獲取NetHandle對象 * 3 使用NetHandle對象指明連接代理和url,用URLConnection對象接收 * 4 connection = (HttpURLConnection) urlConnection * 5 使用connection指定連接方式,并進行連接 * 6 獲取數(shù)據(jù),urlConnection.getInputStream() * 7 輸出數(shù)據(jù),outputStream.toByteArray() * para

8、m component */ private void netRequest(Component component) / 創(chuàng)建一個指定網(wǎng)絡(luò)實例。 netManager = NetManager.getInstance(null); / 檢查網(wǎng)絡(luò)是否激活 if (!netManager.hasDefaultNet() return; / 線程執(zhí)行 ThreadPoolUtil.submit() - / 獲取默認(rèn)激活的數(shù)據(jù)網(wǎng)絡(luò)。 / NetHandle保存數(shù)據(jù)網(wǎng)絡(luò)的句柄。您可以將套接字綁定到 NetHandle 實例以訪問 Internet。 NetHandle netHandle = netM

9、anager.getDefaultNet(); / 接收默認(rèn)數(shù)據(jù)網(wǎng)絡(luò)的狀態(tài)更改通知。 netManager.addDefaultNetStatusCallback(callback); HttpURLConnection connection = null; / ByteArrayOutputStream 這個類實現(xiàn)了一個輸出流,其中數(shù)據(jù)被寫入一個字節(jié)數(shù)組。 緩沖區(qū)會隨著數(shù)據(jù)寫入而自動增長??梢允褂?toByteArray() 和 toString() 檢索數(shù)據(jù)。 try (ByteArrayOutputStream outputStream = new ByteArrayOutputStre

10、am() / 請求的URL String urlString = inputText.getText(); URL url = new URL(urlString); / 使用指定的代理訪問 URL。 / .Proxy.NO_PROXY 代表 DIRECT 連接的代理設(shè)置,基本上告訴協(xié)議處理程序不要使用任何代理 URLConnection urlConnection = netHandle.openConnection(url, .Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) connection = (Htt

11、pURLConnection) urlConnection; connection.setRequestMethod(GET); connection.connect(); trafficDataStatistics(false); try (InputStream inputStream = urlConnection.getInputStream() byte cache = new byte2 * 1024; int len = inputStream.read(cache); while (len != -1) outputStream.write(cache, 0, len); le

12、n = inputStream.read(cache); catch (IOException e) HiLog.error(LABEL_LOG, %publics, netRequest inner IOException); String result = new String(outputStream.toByteArray(); getUITaskDispatcher().asyncDispatch() - outText.setText(result); trafficDataStatistics(true); HttpResponseCache.getInstalled().flu

13、sh(); catch (IOException e) HiLog.error(LABEL_LOG, %publics, netRequest IOException); ); private final NetStatusCallback callback = new NetStatusCallback() Override public void onAvailable(NetHandle handle) HiL(LABEL_LOG, %publics, NetStatusCallback onAvailable); Override public void onBlockedStatus

14、Changed(NetHandle handle, boolean blocked) HiL(LABEL_LOG, %publics, NetStatusCallback onBlockedStatusChanged); ; private void trafficDataStatistics(boolean isStart) int uid = 0; try uid = getBundleManager().getUidByBundleName(getBundleName(), 0); catch (RemoteException e) HiLog.error(LABEL_LOG, %pub

15、lics, trafficDataStatistics RemoteException); if (isStart) rx = DataFlowStatistics.getUidRxBytes(uid); tx = DataFlowStatistics.getUidTxBytes(uid); else rx = DataFlowStatistics.getUidRxBytes(uid) - rx; tx = DataFlowStatistics.getUidTxBytes(uid) - tx; getUITaskDispatcher().asyncDispatch() - statisticsText.setText( TrafficDataStatistics: + System.lineSeparator() + Uplink traffic: + rx + System.lineSeparator() + Downstream traffic: + tx); 三、效果如下圖所示 完整代碼地址: HYPERLINK /jltfcloudcn/jump_to/tree/master/%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AE%9E%E7%8E%B0NetworkManageme

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論