【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用

参考资料

权限开发指导

线程管理

在鸿蒙(HarmonyOS)环境下,优雅的完成Http访问网络【教程】

api讲解

创建 url

URL url=new URL(urlstr);//todo 创建 url

得到HttpURLConnection对象

HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();

设置请求方式

httpURLConnection.setRequestMethod(“GET”);

建立连接

httpURLConnection.connect()

得到请求状态码

int code=httpURLConnection.getResponseCode()

代码如下

        try {
            String urlstr="https://www.baidu.com/";
            URL url=new URL(urlstr);//todo  创建 url
            //todo 得到HttpURLConnection对象
            HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");//todo 设置请求方式
            httpURLConnection.connect();//todo 建立连接
            int code=httpURLConnection.getResponseCode();//todo 获取请求状态码
            if(code==HttpURLConnection.HTTP_OK){
              //todo  请求成功 处理相关业务
            }else{
            //todo 失败业务处理
            }

        }catch (Exception e){
            e.printStackTrace();
        }

【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用

代码运行

config.json添加权限
  "reqPermissions": [{"name":"ohos.permission.INTERNET"}],

【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用
设置访问模式
  "deviceConfig": {
    "default": {
      "network": {
        "cleartextTraffic": true
      }
    }
  },

【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用

xml布局绘制(在xml 布局设置两个text按钮,一个用text于点击发起网络请求,一个text用于显示网络请求得到的结果)代码和效果如下

java代码实现(分为三个方法 第一个方法实现点击事件 ,第二个方法实现网络请求的事件,第三个方法输入流转化为字符串的功能,最后子线程切换到ui主线程,显示字符串)代码如下

package com.harmony.alliance.myapplication.slice;

import com.harmony.alliance.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainAbilitySlice extends AbilitySlice {
    static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
 Text textResult;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //todo 用于显示结果的按钮
        textResult=findComponentById(ResourceTable.Id_TextResult);
        //todo 实现点击事件
        findComponentById(ResourceTable.Id_text_helloworld).setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                //todo 开启线程
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        networkGet();
                    }
                }.start();

            }
        });
    }

    /**
     * 发起网络请求
     */
    public  void  networkGet(){
        try {
            String urlstr="https://www.baidu.com/";
            URL url=new URL(urlstr);//todo  创建 url
            //todo 得到HttpURLConnection对象
            HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");//todo 设置请求方式
            httpURLConnection.connect();//todo 建立连接
            int code=httpURLConnection.getResponseCode();//todo 获取请求状态码
            if(code==HttpURLConnection.HTTP_OK){
                InputStream inputStream=httpURLConnection.getInputStream();//todo 获取网络得到输入流
                byte[] data = read(inputStream);//todo 转化为字节
                String html = new String(data, "UTF-8");// todo 字节转化为字符串
                HiLog.error(LABEL,html);
                //todo 从子线程切换到Ui 主线程
                getUITaskDispatcher().syncDispatch(()   -> {
                    textResult.setText(html);//todo 显示结果
                });
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 输入流转化为字节
     * @param inStream 输入流
     * @return 返回字节
     * @throws Exception 抛出的异常
     */
    public static byte[] read(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while((len = inStream.read(buffer)) != -1)
        {
            outStream.write(buffer,0,len);
        }
        inStream.close();
        return outStream.toByteArray();
    }

}

【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用

运行效果

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

Original: https://www.cnblogs.com/developer-huawei/p/16552170.html
Author: 华为开发者论坛
Title: 【HarmonyOS】【JAVA UI】HarmonyOS 网络HttpURLConnection的基本使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536711/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • vue项目发布时Apache或者nginx配置

    当你项目发布时,项目所在目录是二级目录,并且使用的history路由,可以采用如下配置 apache配置 如果使用nginx配置前两步和apache配置一样 -step3 在本地目…

    Java 2023年5月30日
    070
  • Java不支持协程?那是你不知道Quasar!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 在编程语言的这个圈子里,各种语言之间…

    Java 2023年6月5日
    099
  • Java集合(简单介绍)

    集合 集合 1.集合的作用 2.集合类的分类 Collection Collection方法分类 首先看一下添加操作与批量添加操作 集合删除数据 ArrayList LinkedL…

    Java 2023年6月9日
    074
  • vue-i18n 初体验

    vue-i18n 初体验 使用vue,如何国际化呢?采用 vue-i18n。(i18n,internationalization,i和n中间省略18个字符) vue-i18n 官网…

    Java 2023年6月5日
    081
  • 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(二)-数据库设计

    数据库设计规约 数据库设计遵循以下的阿里开发手册(嵩山版)MySQL 数据库规约: 1. 表达是&#x4E…

    Java 2023年6月8日
    0103
  • 1

    1 posted @2022-09-25 23:44 山海自有归期 阅读(21 ) 评论() 编辑 Original: https://www.cnblogs.com/ljq202…

    Java 2023年6月7日
    082
  • mybatisplus不支持sum,但支持这个

    我们知道,要对数据求和,写sql很简单:select sum(exp) from table_name我们在用mybatisplus做求和计算的时候,mybatisplus的Wra…

    Java 2023年6月15日
    074
  • jackson实体转json时 为NULL不参加序列化的汇总

    首先加入依赖 方法一、实体上使用 @JsonInclude(JsonInclude.Include.NON_NULL) 1、如果放在属性上,如果该属性为NULL则不参与序列化 ;2…

    Java 2023年6月13日
    064
  • Redis分布式锁实现

    Redis分布式锁实现 在分布式环境下,利用Redis实现锁机制,避免资源竞争的做法非常常见。这里探讨一下Redis分布式锁的实现方式、可能存在的问题以及适用场景。 setnx 最…

    Java 2023年6月13日
    098
  • idea永久激活教程(新版)

    第一步 下载新版idea安装包 idea2022.x。下载方式(推荐):访问idea官网选择idea2022旗舰版本进行下载即可,不要选择community版本哦(communit…

    Java 2023年6月9日
    0126
  • spring Cloud构建微服务架构

    http://www.itmuch.com/spring-cloud-sum/spring-cloud-configuration/ SpringCloud-Learning 本项…

    Java 2023年5月30日
    084
  • Docker系列-docker配置远程访问

    Docker Daemon 默认情况下是只允许本地访问的,不允许远程访问。本文将首先介绍 Docker Daemon 的连接方式,然后说明如何配置远程访问。即实现通过本地 dock…

    Java 2023年6月8日
    073
  • 数据库事务与脏读幻读

    事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。 …

    Java 2023年6月13日
    084
  • Pinpoint2.X搭建重要信息

    这里提供一个Pinpoint2.X搭建重要信息,因为最近在搭建Pinpoint,基本全部的流程都走了一遍,我这边是准备自己后续维护Pinpoint,写插件是必须的,也有可能研究一下…

    Java 2023年6月14日
    074
  • Centos静默安装Oracle11G

    环境准备 Oracle 11gR2 64位 Linux版安装包 linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_…

    Java 2023年6月8日
    0100
  • Java面向对象之各种变量详解

    在Java中一定有很多变量让大家头疼,成员变量、类变量、局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不…

    Java 2023年6月7日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球