【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门

这篇具有很好参考价值的文章主要介绍了【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图

先整张效果图,丑点是丑点,但可以用,买不起鸿蒙系统手机的我,只配用虚拟机。

【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java

前言

要说目前最火的手机操作系统,要我来看的话那必然是鸿蒙无疑。16号刚刚结束了第五次鸿蒙内测,在看到这次的内测名单之后,居然有970的机器,这是不是说明俺这手里奋战了三年的荣耀play也可以生鸿蒙了,但现实是970三孤儿果然名不虚传,还是没有我们。
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java
那么言归正传,这次突然想做一个基于鸿蒙的小demo,然后又想到了我之前爬取的小姐姐图片链接还没有用武之地,这俩是不是可以结合一下?上次有这样的想法还是上一次,那么就做一个看小姐姐的小demo吧,开整开整。
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java

实现思路

之前在网上看到有直接把图片下载下来然后放进项目中的,这个很明显不适合我,不仅占的空间大,而且图片还得手动更新,这可不行

我们采用的是调用图片链接接口获取所有的图片链接,一个链接只是一个字符串要比图片占的空间小太多了,将这些链接存储在内存中,有兴趣的可以存在数据库里,然后每次随机获取一条链接就可以,由这条链接获取图片信息,将图片渲染到页面就可以。

整个流程简单的一塌糊涂,总结一下就是

  • 拿取图片链接
  • 由链接获取图片信息
  • 渲染至显示页面

具体实现

建立项目

这个比较基础了,就不说了,如果不大了解的兄弟们,直接去官方文档看看就可以,建立流程非常简单。

建立http链接拿取图片链接

设置网络权限

我们需要访问网络,就必须要设置网络权限,来到config.json文件中,添加以下内容

 "reqPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "com.wxr.xiaowpic.DataAbilityShellProvider.PROVIDER"
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO"
      },
      {
        "name": "ohos.permission.SET_NETWORK_INFO"
      }
    ],

直接在module中添加如上内容,如下图
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java

设置允许http请求

这里注意,重点哈,鸿蒙默认的是发起https请求,因此如果我们发起http请求是会报错的,这里需要修改一下
还是在config.json下,在deviceConfig中添加以下内容

"default": {
      "network": {
        "cleartextTraffic": true
      }
    }

如下图所示,这里吐槽一下,我再寻找怎么设置允许发起http响应的时候,发现好多文章都一样,而且都不适用于我这个项目,还有的人复制别人的文章也能复制错,绝了。
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java

发起http请求,并获取返回的数据

json数据解析

这里要使用到alibaba的fastjson工具类,在build.gradle引入如下依赖

implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.73'

如下图所示
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java

发起请求,获得响应内容

这里使用的是大佬封装好的专门用于请求接口的一个工具,ZZRHttp,同样需要引入依赖,引入过程和上面fastjson引入过程一致。

implementation 'com.zzrv5.zzrhttp:ZZRHttp:1.0.1'

获取接口数据的具体实现如下,这里解释一下,https://2fd8e89d.cpolar.io/getAll这个接口地址,是获取图片链接的,是我本地的服务,所以大家如果需要的话,我可以把我的服务代码发给你们,包括存储图片链接的数据库。

  ZZRHttp.get("https://2fd8e89d.cpolar.io/getAll", new ZZRCallBack.CallBackString() {
                    @Override
                    public void onFailure(int code, String errorMessage) {
                        //http访问出错,此部分在主线程中工作,可以更新UI等操做。
                        MyLabel.error("访问图片链接接口出错");
                        new ToastDialog(getContext()).setText("网络连接出问题了,请稍后重试").show();
                    }

                    @Override
                    public void onResponse(String response) {
                        //http访问成功,此部分在主线程中工作,可以更新UI等操作。
                        MyLabel.info("获取图片链接成功");
                        new ToastDialog(getContext()).setText("正在初始化,稍后").show();
                        //将字符串转换为json对象
                        JSONObject jsonObject = JSONObject.parseObject(response);
                        //将其中返回的图片链接转换为列表
                        JSONArray info = (JSONArray) jsonObject.get("info");
                        MyLabel.info("拿取数据量:" + info.size());
                        info.forEach(item -> {
                            srcs.add(item.toString());
                        });
                        new ToastDialog(getContext()).setText("初始化成功,开始你的快乐吧").show();
                        MyLabel.info("内存中数据数量" + srcs.size());
                    }
                });

将获取的图片链接放入内存中

就是声明一个静态列表变量,目的是为了下次获取图片链接时可以直接在这里拿取图片链接

public void initData() {
        PicDao picDao = new PicDaoImpl(getContext());
        //使用后台线程进行初始化
        TaskDispatcher refreshUITask = createParallelTaskDispatcher("", TaskPriority.DEFAULT);
        refreshUITask.syncDispatch(() -> {
//            List<PicSrc> list = picDao.list();
            //判断内存中有无数据
            if (srcs.size() == 0) {
                MyLabel.info("内存中没东西,第一次打开应用");
                MyLabel.info("调用图片接口获取图片链接列表");
                ZZRHttp.get("https://2fd8e89d.cpolar.io/getAll", new ZZRCallBack.CallBackString() {
                    @Override
                    public void onFailure(int code, String errorMessage) {
                        //http访问出错,此部分在主线程中工作,可以更新UI等操做。
                        MyLabel.error("访问图片链接接口出错");
                        new ToastDialog(getContext()).setText("网络连接出问题了,请稍后重试").show();
                    }

                    @Override
                    public void onResponse(String response) {
                        //http访问成功,此部分在主线程中工作,可以更新UI等操作。
                        MyLabel.info("获取图片链接成功");
                        new ToastDialog(getContext()).setText("正在初始化,稍后").show();
                        JSONObject jsonObject = JSONObject.parseObject(response);
                        JSONArray info = (JSONArray) jsonObject.get("info");
                        MyLabel.info("拿取数据量:" + info.size());
                        info.forEach(item -> {
                            srcs.add(item.toString());
                        });
                        new ToastDialog(getContext()).setText("初始化成功,开始你的快乐吧").show();
                        MyLabel.info("内存中数据数量" + srcs.size());
                    }
                });
            } else {
                MyLabel.info("已经有内容了");
            }
        });

    }

获取网络图片并展示在页面上

http请求工具类

这个类的主要作用就是发起http请求,并返回响应字节流,其实就是获取图片的字节流,代码如下

package com.wxr.xiaowpic.util;

import com.wxr.xiaowpic.label.MyLabel;
import com.zzrv5.mylibrary.ZZRCallBack;
import com.zzrv5.mylibrary.ZZRHttp;
import ohos.hiviewdfx.HiLog;
import ohos.utils.net.Uri;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class HttpUtils {
    //url就是要访问的网络资源,methodType就是请求方式
    public static InputStream getInput(String url,String methodType){
        InputStream inputStream = null;
        try {
            URL url1=new URL(url);
            HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();
            urlConnection.setRequestMethod(methodType);
            urlConnection.connect();
            int rescode=urlConnection.getResponseCode();
            if(rescode==HttpURLConnection.HTTP_OK){
                inputStream=urlConnection.getInputStream();
            }
        } catch (Exception e) {
            HiLog.error(MyLabel.LABEL_LOG,e.getMessage());
            HiLog.error(MyLabel.LABEL_LOG,e.getCause().toString());

        }
        return inputStream;
    }
    
}

字节流转图片工具类

没啥好说的,复制就可以用

package com.wxr.xiaowpic.util;

import com.wxr.xiaowpic.label.MyLabel;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.media.image.ImageSource;
import ohos.media.image.PixelMap;

import java.io.InputStream;

public class ImageUtils {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "XiaoW");

    public static PixelMap createPixelMap(String imageUrl) {

//获取图片字节流信息
        InputStream inputStream = HttpUtils.getInput(imageUrl,"GET");
        PixelMap pixelMap=null;
        ImageSource.SourceOptions sourceOptions = new ImageSource.SourceOptions();
        sourceOptions.formatHint = "image/jpeg";
        HiLog.info(MyLabel.LABEL_LOG,(inputStream==null)+"");
        try {
            ImageSource imageSource = ImageSource.create(inputStream,sourceOptions);
            pixelMap = imageSource.createPixelmap(null);
        }
        catch (Exception e){
            HiLog.info(LABEL_LOG,e.getMessage());
        }



        return pixelMap;
    }
}

图片展示在页面

这里采用的是按钮点击之后进行图片的渲染,其中图片链接是在我们获取的图片链接随机读取一个,然后将该照片渲染至页面

 button.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                TaskDispatcher refreshUITask = createParallelTaskDispatcher("", TaskPriority.DEFAULT);
                refreshUITask.syncDispatch(() -> {
                    //在链接列表中随机取一个数据
                    int index = (int) (Math.random() * srcs.size());
                    MyLabel.info(srcs.get(index));
                    String url=srcs.get(index);
                    MyLabel.info("开始获取图片");
                    //访问线上图片
                    PixelMap pixelMap = ImageUtils.createPixelMap(url);
                    getContext().getUITaskDispatcher().asyncDispatch(new Runnable() {
                        @Override
                        public void run() {
                            //Image组件填充位图数据,ui界面更新
                            image.setPixelMap(pixelMap);
                            pixelMap.release();
                        }
                    });

                });
            }
        });

总结

之前没有自己做过移动端的demo,总之收获还是不少的,所以期间出了不少问题,需要全部代码的兄弟们私信就好。
【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门,harmony,java,harmonyos,http,java文章来源地址https://www.toymoban.com/news/detail-608235.html

到了这里,关于【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS 鸿蒙应用开发(十一、面向鸿蒙开发的JavaScript基础)

    ArkTS 是HarmonyOS(鸿蒙操作系统)原生应用开发的首选语言。它是用于构建用户界面的一种TypeScript方言,扩展了TypeScript以适应HarmonyOS生态系统的UI开发需求。ArkTS 融合了TypeScript的静态类型系统和现代UI框架的设计理念,为开发者提供了一种更安全高效的方式来编写HarmonyOS应用。

    2024年02月20日
    浏览(56)
  • HarmonyOS Developer——鸿蒙【构建第一个JS应用(FA模型)】

    创建JS工程 JS工程目录结构 构建第一个页面 构建第二个页面 实现页面间的跳转 使用真机运行应用 说明 为确保运行效果,本文以使用 DevEco Studio 3.1 Release 版本为例,点击此处获取下载链接。 若首次打开 DevEco Studio ,请点击 Create Project 创建工程。如果已经打开了一个工程,请

    2024年02月04日
    浏览(63)
  • 鸿蒙应用开发尝鲜:初识HarmonyOS

    来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在TypeScript(简称TS)基础上的拓展,而TS又是JavaScrip

    2024年02月02日
    浏览(65)
  • 鸿蒙HarmonyOS应用开发初体验

    最近华为发布mt60新机火了,作为一名移动开发程序员,对鸿蒙系统开发移动端就很感兴趣了。 开发工具:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 下载完后按默认安装就可以了,界面跟AS很类似,之前我jdk环境配置就不在配置了,不懂的可以百度下很多教程。 这是基

    2024年02月09日
    浏览(54)
  • 【鸿蒙开发】HarmonyOS应用开发者基础认证题库

    华为开发者学堂   1、考试需实名认证,请在考前于个人主页→个人信息→基本信息→进行实名认证,否则考试通过无法获取专业证书; 2、每个帐号每月有3次考试机会,次月重置考试次数。做题过程中请认真对待,避免考试次数浪费; 3、考试时长为1小时,请合理分配做题

    2024年03月09日
    浏览(114)
  • 【HarmonyOS】鸿蒙应用开发基础认证题目

    【HarmonyOS】鸿蒙应用开发基础认证题目; 随着鸿蒙系统的不断发展,前不久,华为宣布了重磅消息,HarmonyOS next 开发者版本会在明年(2024)开放,并不再支持Android应用!这也意味着,移动端开发者今后又多了一个适配平台,也到了必须学的时候了。 目前已知一线大厂均已开

    2024年02月04日
    浏览(147)
  • 『牛角书』HarmonyOS鸿蒙实战 开发一个简单聊天助手APP

    我是通过b站上面老师的讲解,跟着老师编写了一个简单聊天助手app,简答实用,对于刚开始接触鸿蒙的我们来说很有帮助。 所用软件为DevEco Studio,点击Create HarmonyOS Project,这里选择了第一个空的项目,点击next会跳至下一个页面。 这里是项目的名称,因为是一个demo,就没有

    2024年02月12日
    浏览(47)
  • HarmonyOS鸿蒙原生应用开发设计- 隐私声明

    HarmonyOS设计文档中,为大家提供了独特的隐私声明,开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的内容产生的侵权意外情况等,减少自主创作隐私声明的工作量。当然,如果

    2024年02月05日
    浏览(67)
  • HarmonyOS鸿蒙原生应用开发设计- 图标库

    HarmonyOS设计文档中,为大家提供了独特的图标库,开发者可以根据需要直接引用。 图标库可以分为双色图标、填充图标、线性图标。具体分为 键盘、箭头、连接状态、媒体、人、设备、索引、通信、文件、物体与工具等。 整体分类 开发者直接使用官方提供的图标库内容,既

    2024年02月07日
    浏览(65)
  • 鸿蒙(HarmonyOS)应用开发——构建页面(题目答案)

    1.在Column容器中的子组件默认是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向,在Row容器中的组件默认是按照从左到右的水平方向布局的,其主轴的方向是水平方向。 正确(True) 2.List容器可以沿水平方向排列,也可以沿垂直方向排列。 正确(True) 3.当Tabs组件的参数

    2024年01月20日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包