侵权投诉

如何通过卡片进行直达教育类专栏分类照片

HarmonyOS官方合作社区 2021-06-30 09:43 次阅读

# 前言

对于教育类应用程序来说,一般都有课程分类,包括我们程序员学习技术,也简单。简单的说,一个程序员社区,必然有后期技术分类,比如有的学习Python,有的学习Java鸿蒙技术,有的对OpenCV动物。+

而教育类应用程序,如果能够通过鸿蒙的非标准功能,将课程选择选择显眼的地方,那么用户就可以很容易地获取自己的知识社区进行学习,非常的方便。

所以,掌握好鸿蒙卡片功能,能够在细微的体验上,让用户感到贴心。下面,来我们讲解这款教育类专栏分类照片,如何通过卡片进行直达。

# 创建一个Java项目与卡片

首先,我们需要创建一个纯Java项目。

接着,在生成的Java鸿蒙项目中,点击entry-src右键创建Service Widget一个2*4的卡片布局:

创建完成之后,项目下面会生成一个java-widget文件,以及js卡片布局文件。

这样你运行项目,默认会显示鸿蒙开发工具提供给你的2*4布局卡片。但是我们需要将卡片的功能换成技术社区的直接跳转,接下来,我们来构建卡片。

# 完成卡片布局

我们的整体布局并没有变,但是后面的图片以及前面的文字都发生了变化,而js文件下,有一个hml文件,这是一个类html语法的文件,我们只需要改变字符串字符串以及图片即可,代码如下(index.hml):

《div class=“div_basic_container”》

《stack class=“main_sub_container” onclick=“routerEvent”》 《image class=“item_image” src=“/common/homepage.png”》 《/image》

《div class=“div_text_container”》 《text class=“title”》主页 《/text》 《/div》 《/stack》

《div class=“first_sub_container”》

《div class=“item_first_container” onclick=“routerEvent1”》 《text class=“text_item1”》Python 《/text》 《/div》

《div class=“item_second_container” onclick=“routerEvent2”》 《text class=“text_item2”》OpenCV 《/text》 《/div》 《/div》

《div class=“second_sub_container”》

《div class=“item_first_container” onclick=“routerEvent3”》 《text class=“text_item3”》鸿蒙开发 《/text》 《/div》

《div class=“item_second_container” onclick=“routerEvent4”》 《text class=“text_item4”》量化交易 《/text》 《/div》 《/div》《/div》

接下来,我们需要弄清楚,js卡片布局是如何跳转到Java界面的,我们从上面的js文件发现,还有一个index.json。没错,样式由index.css产生,但跳转以及与用户的交互全在index.json文件中,代码如下(index.json):

{ “data”: { “title”: “HomePage”, “textContent1”: “Python”, “textContent2”: “OpenCV”, “textContent3”: “Harmony”, “textContent4”: “Search” }, “actions”: { “routerEvent”: { “action”: “router”, “abilityName”: “com.liyuanjinglyj.javacarddemo.widget.WidgetAbility”, “params”: { “message”: “{{title}}” } }, “routerEvent1”: { “action”: “router”, “abilityName”: “com.liyuanjinglyj.javacarddemo.widget.WidgetAbility”, “params”: { “message”: “{{textContent1}}” } }, “routerEvent2”: { “action”: “router”, “abilityName”: “com.liyuanjinglyj.javacarddemo.widget.WidgetAbility”, “params”: { “message”: “{{textContent2}}” } }, “routerEvent3”: { “action”: “router”, “abilityName”: “com.liyuanjinglyj.javacarddemo.widget.WidgetAbility”, “params”: { “message”: “{{textContent3}}” } }, “routerEvent4”: { “action”: “router”, “abilityName”: “com.liyuanjinglyj.javacarddemo.widget.WidgetAbility”, “params”: { “message”: “{{textContent4}}” } } }}

如上面代码所示,action表示这是路由跳转,其中,abilityName表示关联的Java卡片生成类,而params表示传递的参数。当然,params并不是界面的跳转参数,而是告诉Java你需要跳转到哪个界面。

我们来看看WidgetImpl类的实现代码:

public class WidgetImpl extends FormController {

@Override public Class《? extends AbilitySlice》 getRoutePageSlice(Intent intent) { HiLog.info(TAG, “set route page slice.”); String param = intent.getStringParam(“params”); ZSONObject zsonObject = ZSONObject.stringToZSON(param); switch (zsonObject.getString(“message”)) { case “HomePage”: return MainAbilitySlice.class; case “Python”: return FunctionPythonSlice.class; case “OpenCV”: return FunctionOpenCVSlice.class; case “Harmony”: return FunctionHarmonySlice.class; case “Search”: return FunctionSearchSlice.class; default: return null; } }}

这里大部分代码我们都可以忽略,只需要关心getRoutePageSlice方法即可,可以看到,我们在index.json中params指定的参数,就是我们需要跳转的Java界面,这里通过switch寻找我们卡片传递的参数,然后跳转到指定的界面。

比如,这里用户如果需要学习python,那么就会传递python参数,然后选择FunctionPythonSlice界面进行跳转。其他的类同。

#实现卡片跳转界面

对于App来说,不同的界面的社区往往会有不同的数据,而每个数据又是通过json返回的,那么就会有不同的json接口提供给我们。

这里,我们来实现FunctionPythonSlice,代码如下:

public class FunctionPythonSlice extends AbilitySlice {

private String url=“https://harmony-1300376177.cos.ap-shanghai.myqcloud.com/python_item.json”; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent((ComponentContainer) LYJUtils.getListContainer(url,this)); }}

这里通过博主自定义的工具类返回一个ListContainer界面,因为每个卡片上的功能只是跳转的知识不同,但数据样式基本一样。而ListContainer界面的生成代码如下(LYJUtils):

public class LYJUtils { public static ListContainer getListContainer(String url, AbilitySlice abilitySlice){ ListContainer listContainer=new ListContainer(null); listContainer.setLayoutConfig( new StackLayout.LayoutConfig( ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT )); ZZRHttp.get(url, new ZZRCallBack.CallBackString() { @Override public void onFailure(int code, String errorMessage) {//错误处理 } @Override public void onResponse(String response) { //http访问成功,此部分内容在主线程中工作; HiJson hiJson = new HiJson(response); int counts=hiJson.get(“news_item”).count(); List《InfoItem》 infoItemList=new ArrayList《》(); for(int i=0;i《counts;i++){ InfoItem infoItem=new InfoItem(); infoItem.setTitle(hiJson.get(“news_item”).get(i).value(“title”)); infoItem.setDigest(hiJson.get(“news_item”).get(i).value(“digest”)); infoItem.setUrl(hiJson.get(“news_item”).get(i).value(“url”)); infoItem.setThumb_url(hiJson.get(“news_item”).get(i).value(“thumb_url”)); infoItemList.add(infoItem); } InfoItemListProvider infoItemListProvider=new InfoItemListProvider(infoItemList, abilitySlice); listContainer.setItemProvider(infoItemListProvider); listContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { @Override public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { Intent intent=new Intent(); intent.setParam(“url”,infoItemList.get(i).getUrl()); abilitySlice.present(new WebViewAbilitySlice(),intent); } }); } }); return listContainer; }}

其他卡片功能的界面基本一致,唯有url提供的json接口不一样。当然,这里还涉及ListContainer适配器,代码如下(InfoItemListProvider):

public class InfoItemListProvider extends BaseItemProvider { private List《InfoItem》 infoItemList=new ArrayList《》(); private AbilitySlice abilitySlice; HiLogLabel label=new HiLogLabel(HiLog.LOG_APP, 0x00201, “TAG”); public InfoItemListProvider(List《InfoItem》 infoItemList,AbilitySlice abilitySlice) { this.infoItemList=infoItemList; this.abilitySlice=abilitySlice; HiLog.error(label,String.valueOf(infoItemList.size())+“11111”); }

@Override public int getCount() { return infoItemList == null ? 0 : infoItemList.size(); }

@Override public Object getItem(int i) { if (infoItemList != null && i 》= 0 && i 《 infoItemList.size()){ return infoItemList.get(i); } return null; }

@Override public long getItemId(int i) { return i; }

@Override public Component getComponent(int i, Component component, ComponentContainer componentContainer) { final Component cpt; if (component == null) { cpt = LayoutScatter.getInstance(this.abilitySlice).parse(ResourceTable.Layout_infoitem_listitem, null, false); } else { cpt = component; } InfoItem infoItem = this.infoItemList.get(i); HiLog.error(label,String.valueOf(i)+“11111”); Text title=(Text)cpt.findComponentById(ResourceTable.Id_infoitem_listitem_title); title.setText(infoItem.getTitle()); Image image=(Image)cpt.findComponentById(ResourceTable.Id_infoitem_listitem_image); new ImageNetWork(this.abilitySlice,image,infoItem.getThumb_url()).start(); return cpt; }}

获取ListContainer列表的实体类(InfoItem.java)如下所示:

public class InfoItem { String title;//标题 String digest;//描述 String url;//文章链接 String thumb_url;//文章头图链接

public InfoItem(String title,String digest,String url,String thumb_url) { this.title=title; this.digest=digest; this.url=url; this.thumb_url=thumb_url; }

public InfoItem() { super(); }

public String getTitle() { return title; }

public void setTitle(String title) { this.title = title; }

public String getDigest() { return digest; }

public void setDigest(String digest) { this.digest = digest; }

public String getUrl() { return url; }

public void setUrl(String url) { this.url = url; }

public String getThumb_url() { return thumb_url; }

public void setThumb_url(String thumb_url) { this.thumb_url = thumb_url; }}

当然,这里还涉及列表的样式(infoitem_listitem.xml):

《DirectionalLayout xmlns:ohos=“http://schemas.huawei.com/res/ohos” ohos:height=“match_content” ohos:width=“match_parent” ohos:margin=“10vp” ohos:alpha=“0.5” ohos:background_element=“$graphic:listitem_backgroud” ohos:orientation=“vertical”》

《Image ohos:id=“$+id:infoitem_listitem_image” ohos:height=“150vp” ohos:width=“match_parent” ohos:scale_mode=“stretch”/》

《Text ohos:id=“$+id:infoitem_listitem_title” ohos:height=“match_content” ohos:width=“match_parent” ohos:text_size=“18vp” ohos:multiple_lines=“true” ohos:text_alignment=“left” ohos:bottom_margin=“5vp” ohos:left_margin=“2vp” ohos:right_margin=“2vp” ohos:top_margin=“5vp” ohos:text_color=“#0000FF”/》

《/DirectionalLayout》

#WebView文章详情界面

除此之外,我们还要实现ListContainer的跳转界面。因为这是网站的内容,我们只需要通过WebView进行加载即可。(WebViewAbilitySlice)代码如下:

public class WebViewAbilitySlice extends AbilitySlice { HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, “TAG”); private WebView webView; private static String EXAMPLE_URL; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_web_view); this.webView=(WebView)this.findComponentById(ResourceTable.Id_ability_web_view_webview); this.webView.getWebConfig().setJavaScriptPermit(true); if(intent != null) { EXAMPLE_URL = intent.getStringParam(“url”); this.webView.setWebAgent(new ExampleWebAgent()); this.webView.load(EXAMPLE_URL); } }

private class ExampleWebAgent extends WebAgent { @Override public boolean isNeedLoadUrl(WebView webview, ResourceRequest request) { Uri uri = request.getRequestUrl(); if (EXAMPLE_URL.equals(uri.getDecodedHost())) { // 由WebView通过默认方式处理 return false; }

// 增加开发者自定义逻辑 return super.isNeedLoadUrl(webview, request); } }

@Override public void onActive() { super.onActive(); }

@Override public void onForeground(Intent intent) { super.onForeground(intent); }}

鸿蒙提供给我们的Java WebView组件默认是直接跳转到浏览器的,为了让其在App内部显示,我们需要通过setWebAgent()方法进行设置。

而样式文件这里就不展示了,就只有一个WebView组件。

#主页TabList与PageSlider联动

在众多的App中,我们能看到顶部标题栏可以进行滑动的切换页面,而这里我们也来认真实现卡片跳转的主页界面。

(MainAbilitySlice)代码如下:

public class MainAbilitySlice extends AbilitySlice { HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, “TAG”); private PageSlider pageSlider; private TabList tabList; private String[] tab_str_list = {“推荐”, “Python”, “OpenCV”, “鸿蒙开发”}; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); this.pageSlider = (PageSlider) findComponentById(ResourceTable.Id_ability_main_pageslider); this.pageSlider.setProvider(new MyPageProvider(getData(), this)); this.tabList = (TabList) findComponentById(ResourceTable.Id_ability_main_tablist); for (int i = 0; i 《 tab_str_list.length; i++) { TabList.Tab tab = tabList.new Tab(getContext()); tab.setText(tab_str_list[i]); tab.setLayoutConfig( new StackLayout.LayoutConfig( ComponentContainer.LayoutConfig.MATCH_CONTENT, ComponentContainer.LayoutConfig.MATCH_PARENT )); this.tabList.addTab(tab); if (i == 0) { tab.select(); } } this.tabList.addTabSelectedListener(new TabList.TabSelectedListener() { @Override public void onSelected(TabList.Tab tab) { //当某个Tab从未选中状态变为选中状态时的回调 pageSlider.setCurrentPage(tab.getPosition()); }

@Override public void onUnselected(TabList.Tab tab) { //当某个Tab从选中状态变为未选中状态时的回调 }

@Override public void onReselected(TabList.Tab tab) { //当某个Tab已处于选中状态,再次被点击时的状态回调 } }); pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() { @Override public void onPageSliding(int itemPos, float itemPosOffset, int itemPosPixles) {

}

@Override public void onPageSlideStateChanged(int state) { }

@Override public void onPageChosen(int itemPos) { tabList.selectTabAt(itemPos); } }); }

private List《String》 getData(){ List《String》 stringList=new ArrayList《》(); stringList.add(“https://harmony-1300376177.cos.ap-shanghai.myqcloud.com/swiper_item.json”); stringList.add(“https://harmony-1300376177.cos.ap-shanghai.myqcloud.com/python_item.json”); stringList.add(“https://harmony-1300376177.cos.ap-shanghai.myqcloud.com/opencv_item.json”); stringList.add(“https://harmony-1300376177.cos.ap-shanghai.myqcloud.com/harmony_item.json”); return stringList; }

主页的布局文件(ability_main.xml)代码如下所示:

《?xml version=“1.0” encoding=“utf-8”?》《DirectionalLayout xmlns:ohos=“http://schemas.huawei.com/res/ohos” ohos:height=“match_parent” ohos:width=“match_parent” ohos:alignment=“center” ohos:orientation=“vertical”》

《TabList ohos:id=“$+id:ability_main_tablist” ohos:height=“match_content” ohos:width=“match_parent” ohos:tab_margin=“12vp” ohos:text_alignment=“center” ohos:orientation=“horizontal” ohos:fixed_mode=“true” ohos:text_size=“20vp” ohos:normal_text_color=“#808080” ohos:selected_text_color=“#000000” ohos:selected_tab_indicator_color=“#FF0000” ohos:selected_tab_indicator_height=“3vp”/》

《PageSlider ohos:id=“$+id:ability_main_pageslider” ohos:height=“match_parent” ohos:width=“match_parent” ohos:layout_alignment=“center”/》

《/DirectionalLayout》

ListContainer需要适配器进行适配,PageSlider同样也是需要,我们需要给PageSlider提供不同的链接,然后PageSlider单个页面的ListContainer根据这些链接接口获取不同的知识列表。(MyPageProvider)代码如下:

public class MyPageProvider extends PageSliderProvider { HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, “TAG”); private AbilitySlice abilitySlice; private List《String》 stringList;

public MyPageProvider(List《String》 list,AbilitySlice abilitySlice){ this.stringList=list; this.abilitySlice=abilitySlice; }

@Override public int getCount() { return this.stringList.size(); }

@Override public Object createPageInContainer(ComponentContainer componentContainer, int i) { final String url = this.stringList.get(i); ListContainer listContainer=new ListContainer(null); listContainer.setLayoutConfig( new StackLayout.LayoutConfig( ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT )); ZZRHttp.get(url, new ZZRCallBack.CallBackString() { @Override public void onFailure(int code, String errorMessage) { //错误处理 } @Override public void onResponse(String response) { //http访问成功,此部分内容在主线程中工作; //可以更新UI等操作,但请不要执行阻塞操作。 HiJson hiJson = new HiJson(response); int counts=hiJson.get(“news_item”).count(); List《InfoItem》 infoItemList=new ArrayList《》(); for(int i=0;i《counts;i++){ InfoItem infoItem=new InfoItem(); infoItem.setTitle(hiJson.get(“news_item”).get(i).value(“title”)); infoItem.setDigest(hiJson.get(“news_item”).get(i).value(“digest”)); infoItem.setUrl(hiJson.get(“news_item”).get(i).value(“url”)); infoItem.setThumb_url(hiJson.get(“news_item”).get(i).value(“thumb_url”)); infoItemList.add(infoItem); } InfoItemListProvider infoItemListProvider=new InfoItemListProvider(infoItemList, abilitySlice); listContainer.setItemProvider(infoItemListProvider); listContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { @Override public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { Intent intent=new Intent(); intent.setParam(“url”,infoItemList.get(i).getUrl()); abilitySlice.present(new WebViewAbilitySlice(),intent); } }); } }); componentContainer.addComponent(listContainer); return listContainer; }

@Override public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) { componentContainer.removeComponent((Component) o); }

@Override public boolean isPageMatchToObject(Component component, Object o) { return true; }}

到这里,我们的教育类App卡片分类功能就全部完成了,实现的效果如顶部视频所示。

#其他权限设置

当然,这款App卡片功能要能完美的运行,还不能少了部分权限具体配置文件config.json修改如下所示:

“module”: { “reqPermissions”: [ { “name”: “ohos.permission.INTERNET” }, { “name”: “ohos.permission.GET_NETWORK_INFO” }, { “name”: “ohos.permission.SET_NETWORK_INFO” } ], “metaData”: { “customizeData”: [ { “name”: “hwc-theme”, “value”: “androidhwext:style/Theme.Emui.Light.NoTitleBar” } ] },

其中,reqPermissions是权限,这里因为获取了网络的json数据,所以必须给与网络权限。而metaData是样式,这里我们去除了默认的标题栏。

编辑:jq

原文标题:#HarmonyOS征文#教育类社区卡片实战

文章出处:【微信号:HarmonyOS_Community,微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

MSK调制解调器的matlab仿真

继续讲解程序!MSK也能进行相干解调?是的!同样是采用锁相环!先来看看MSK的优点,这是由于下面的这....
的头像 通信工程师专辑 发表于 09-18 11:43 102次 阅读
MSK调制解调器的matlab仿真

介绍3种方法跨时钟域处理方法

跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者....
的头像 FPGA设计论坛 发表于 09-18 11:33 623次 阅读
介绍3种方法跨时钟域处理方法

机智云追踪外卖骑手保温箱硬件开发和项目演示

01 本章实现功能介绍 追踪外卖骑手的保温箱的GPS定位信息以及外卖箱是否被人打开,以防止骑手在送餐....
的头像 机智云开发者 发表于 09-18 11:03 103次 阅读

深入探究Linux系统噪音统计(osnoise tracer)

在Linux系统中作为一个普通线程是非常苦逼的。不仅NMI 、硬中断、软中断可以打断它,甚至其它普通....
的头像 Linux阅码场 发表于 09-18 10:53 143次 阅读
深入探究Linux系统噪音统计(osnoise tracer)

avr单片机INT0是如何去模拟代码的

avr单片机INT0是如何去模拟代码的?怎样去编写其代码?...
发表于 09-18 06:49 0次 阅读

荣耀30S正式版鸿蒙系统官宣升级进行中

第八批的内测机型也已经公布了,计划10月上旬启动内测招募华为Nova 3i,华为Nova 2s,荣耀9,荣耀V9,荣耀play,荣耀NOTE...
发表于 09-17 15:39 202次 阅读

鸿蒙系统

鸿蒙系统是由华为公司于2012年开发设计,并且于2019年正式投入应用的互联网项目...
发表于 09-17 14:30 120次 阅读

三菱交流伺服系统伺服故障和报警代码

伺服故障和报警代码大全,超实用!使用三菱交流伺服系统主要由三个系列:MR-ES、MR-J2S、MR-J3。通常故障情况可由伺服...
发表于 09-17 08:54 0次 阅读

如何利用51单片机制作从左至右再从右制作的流水灯呢

如何利用51单片机制作从左至右再从右制作的流水灯呢?如何编写其代码程序?...
发表于 09-17 06:52 0次 阅读

松下伺服报警代码保护功能

《松下伺服故障报警代码分析及处理》由会员分享,可在线阅读,更多相关《松下伺服故障报警代码分析及处理(2页珍藏版)》请在人人文...
发表于 09-17 06:20 0次 阅读

(网盘)java之package以及eclipse的使用等试验视频资料

(网盘)java之package以及eclipse的使用等试验视频资料(电源技术期刊是不是ei)-关....
发表于 09-16 15:21 6次 阅读
(网盘)java之package以及eclipse的使用等试验视频资料

​开发板上玩GTA RISC-V多项移植项目成功运作中

电子发烧友网报道(文/周凯扬)RISC-V近期再度掀起了不小的热度,苹果招募RISC-V程序员负责其....
的头像 电子发烧友网 发表于 09-16 11:59 140次 阅读
​开发板上玩GTA RISC-V多项移植项目成功运作中

嵌入式开发中实用的宏打印函数

宏打印函数在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息....
的头像 FPGA之家 发表于 09-16 10:05 98次 阅读
嵌入式开发中实用的宏打印函数

深度解读HarmonyOS自定义UI组件的使用

     一、UI组件概述   UI组件(以下简称“组件”),是构建界面的核心。 应用中所有的界面元....
的头像 HarmonyOS开发者 发表于 09-16 09:30 89次 阅读
深度解读HarmonyOS自定义UI组件的使用

使用Kotlin替代Java重构AOSP应用

两年前,Android 开源项目 (AOSP) 应用团队开始使用 Kotlin 替代 Java 重构....
的头像 谷歌开发者 发表于 09-16 09:26 101次 阅读
使用Kotlin替代Java重构AOSP应用

怎样去设计一种基于鸿蒙系统+Hi3861的WiFi小车

基于鸿蒙系统 + Hi3861 的WiFi小车首先,我们得有一套WiFi小车套件,其实也是Hi3861 加上电机、循迹模块、超声波等模块。小...
发表于 09-16 09:16 0次 阅读

DevEco Studio 2.2 Beta2新版本发布,SDK API6正式Release

  HUAWEI DevEco Studio 是开发HarmonyOS应用和原子化服务的一站式集成开发环境(IDE),为开发者提供...
发表于 09-15 17:28 202次 阅读

华为开发者大会比去年推迟1个月,在憋什么大招?鸿蒙3.0?

15日,华为官方微博发了一条动态海报,官宣华为开发者大会2021(简称HDC)将在10月22日-24....
的头像 物联网星球 发表于 09-15 16:38 360次 阅读
华为开发者大会比去年推迟1个月,在憋什么大招?鸿蒙3.0?

魔方网表,无代码开发平台NCDP的无冕之王

NCDP也就是No-code development platform,无代码开发平台,我第一次听到....
的头像 话说科技 发表于 09-15 14:34 85次 阅读

助推工业智能化,鸿蒙系统落地能源场景

华为首次推出矿山鸿蒙操作系统,鸿蒙系统也打破边界首次进入我国亿吨级巨型煤矿等工业领域。未来矿山鸿蒙操作系统还有望在火电、...
发表于 09-15 11:10 0次 阅读
助推工业智能化,鸿蒙系统落地能源场景

51单片机的启动文件作用是什么

在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: 一般情况下,需要选择“是”....
的头像 嵌入式ARM 发表于 09-15 09:12 181次 阅读
51单片机的启动文件作用是什么

如何充分利用Heroku CI

ci/cd heroku 持续集成和持续交付(CI / CD)是当今软件工程开发过程中的最佳实践。  持续集成 (CI)允许开发人...
发表于 09-15 08:43 0次 阅读

鸿蒙系统如何设置自定义下拉刷新控件

Ohos-MaterialRefreshLayout 是一个自定义 Material 风格下拉刷新控....
的头像 HarmonyOS技术社区 发表于 09-13 09:24 172次 阅读

FastThreadLocal快在哪里

blog.csdn.net/mycs2012/article/details/90898128 1 ....
的头像 Android编程精选 发表于 09-13 09:17 132次 阅读

Java破解工具软件下载

Java破解工具软件下载
发表于 09-12 10:21 24次 阅读

C++基础语法友元类和友元函数

本期是C++基础语法分享的第五节,今天给大家来分享一下: (1)explicit(显式)关键字; (....
的头像 C语言编程学习基地 发表于 09-12 09:52 190次 阅读

一条SQL语句是怎么被执行的

一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一....
的头像 Linux爱好者 发表于 09-12 09:44 168次 阅读
一条SQL语句是怎么被执行的

如何通过Python脚本实现WIFI密码的暴力破解

前言 本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。....
的头像 马哥Linux运维 发表于 09-10 17:09 323次 阅读
如何通过Python脚本实现WIFI密码的暴力破解

基于Java的接口快速开发框架

作者丨编码砖家 来源丨http://adkx.net/w5m4s Part1简介 magic-api....
的头像 Android编程精选 发表于 09-10 09:36 865次 阅读

软件工程师为什么要写文档

在大多数软件工程师对编写、使用和维护代码的抱怨中,一个常见的问题是缺乏高质量的文档。缺乏文档有什么副....
的头像 Linux阅码场 发表于 09-09 11:26 251次 阅读

在AArch64平台上性能下降的例子

编者按:目前许多公司同时使用 x86 和 AArch64 2 种主流的服务器。这两种环境的算力相当,....
的头像 Linux阅码场 发表于 09-09 11:11 224次 阅读

使用deepstream-test的范例代码修改车牌识别与遮盖

前一篇文章提到使用deepstream-test的范例代码,修改成“车牌识别”与“遮盖(redact....
的头像 NVIDIA英伟达企业解决方案 发表于 09-09 10:04 176次 阅读
使用deepstream-test的范例代码修改车牌识别与遮盖

在STM32G4片内不同存储空间运行的速度差异

最近有人问起程序在STM32G4片内不同存储空间运行的速度差异。说实在的,这个很难说死或说出个绝对的....
的头像 茶话MCU 发表于 09-09 09:57 235次 阅读
在STM32G4片内不同存储空间运行的速度差异

骑手保温箱追踪及温湿度监测4G设备接入机智云教程

01 前言 利用机智云提供的通用版App即使不懂云和App开发,也可以在不用写任何代码的情况下,轻松....
的头像 机智云开发者 发表于 09-09 09:16 147次 阅读
骑手保温箱追踪及温湿度监测4G设备接入机智云教程

Kitronik ARCADE游戏手柄实现连连看

连连看相信大家都玩过,但这个用Kitronik AR CADE游戏手柄来玩连连看的项目你相信是一个高....
的头像 电子森林 发表于 09-08 11:47 223次 阅读
Kitronik ARCADE游戏手柄实现连连看

如何把Docker Registry迁移到Harbor

“要如何将 docker registry 中的镜像迁移至 harbor?本文介绍了四种具体的思路和....
的头像 马哥Linux运维 发表于 09-07 16:29 300次 阅读
如何把Docker Registry迁移到Harbor

最为精简的一个Linux Fork炸弹解析

转自:http://blog.saymagic.cn/2015/03/25/fork-bomb.ht....
的头像 Linux爱好者 发表于 09-07 16:12 115次 阅读

支付宝支持HarmonyOS版本的SDK

随着 HarmonyOS 的快速发展,支付宝也推出了支持 HarmonyOS 版本的 SDK。 具体....
的头像 HarmonyOS技术社区 发表于 09-06 09:46 971次 阅读

鸿蒙系统中如何实现通知功能

HarmonyOS 通过 ANS(Advanced Notification Service,即通知....
的头像 HarmonyOS技术社区 发表于 09-06 09:42 390次 阅读

鸿蒙的数据库知识点学习

移动端开发,数据存储是非常重要的,鸿蒙也不例外,说到数据存储,首要的就是数据库了,数据库的存储机制是....
的头像 HarmonyOS技术社区 发表于 09-06 09:34 171次 阅读

在鸿蒙系统的撸引导页代码的经验

手机 APP 的引导页是一个常见的功能,今天和大家一起分享在鸿蒙系统的撸引导页代码的经验。 应用引导....
的头像 HarmonyOS技术社区 发表于 09-06 09:25 150次 阅读

如何在鸿蒙系统弄一个彩票查询卡片

接触鸿蒙开发已经有 3 个来月了,最近开始在看鸿蒙卡片开发。因为之前的开发大都是基于 Java UI....
的头像 HarmonyOS技术社区 发表于 09-06 09:17 149次 阅读

鸿蒙注册登录页面的实现步骤

注册登录页面 设置的要求如下: 新建项目:TextApplication 上面的数值单位都是 px ....
的头像 HarmonyOS技术社区 发表于 09-06 09:12 331次 阅读

使用Intellij IDEA的一些小技巧

https://blog.csdn.net/linsongbin1/article/details/....
的头像 Android编程精选 发表于 09-05 15:03 318次 阅读

内联汇编代码中的关键语法规则讲解

一、基本 asm 格式 1. 语法规则 2. test1.c 插入空指令 3. test2.c 操作....
的头像 硬件攻城狮 发表于 09-05 09:46 227次 阅读

200万颗芯片接入华为鸿蒙,这家公司上半年营收大涨7成

近日,芯海科技发布2021年上半年业绩报告,公司实现销售收入27,458.26万元,较上年同期增长7....
的头像 Monika观察 发表于 09-03 09:33 1026次 阅读
200万颗芯片接入华为鸿蒙,这家公司上半年营收大涨7成

C语言代码中的extern

在你的C语言代码中,不知能否看到类似下面的代码: 这好像没有什么问题,你应该还会想:“嗯⋯是啊,我们....
的头像 STM32嵌入式开发 发表于 09-02 15:13 205次 阅读
C语言代码中的extern

你们知道指针和引用正确的使用场景吗

先解决两个疑问 ◆ 指针和引用的不同之处是什么? ◆ 何时用用指针?何时用引用? 指针和引用的不同之....
的头像 STM32嵌入式开发 发表于 09-02 14:37 180次 阅读
你们知道指针和引用正确的使用场景吗

Vivado调用Questa Sim或ModelSim仿真小技巧

Vivado调用Questa Sim或ModelSim仿真中存在的一些自动化问题的解决方案。 Viv....
的头像 FPGA之家 发表于 09-02 10:12 203次 阅读
Vivado调用Questa Sim或ModelSim仿真小技巧

比Arduino更简单易用的开发套件ShineBlink

Hi 机友们,我想向你推荐一个小而美的产品,一个比Arduino更简单易用的开发套件——ShineB....
的头像 机智云物联网 发表于 09-02 10:04 578次 阅读

Go编译器已默认启用-G=3支持泛型

Go 项目代码仓库昨日提交和合并的一个 PR 显示,Go 语言已在 cmd/compile 中默认启....
的头像 马哥Linux运维 发表于 09-01 15:52 1210次 阅读
Go编译器已默认启用-G=3支持泛型

分享一个最新的的Python对象序列化方式

许多Python标准库都有一些未被赏识的精华。其中之一是允许简单优雅的基于参数类型的函数分发。这一特....
的头像 马哥Linux运维 发表于 09-01 15:19 674次 阅读
分享一个最新的的Python对象序列化方式

Go常用的加密算法详细解读

【导读】本文介绍了常用的加密算法,并对这些加密算法结合实际 golang 代码段进行了详细解读。 前....
的头像 开关电源芯片 发表于 09-01 14:47 127次 阅读

一文透析Nginx-ingress 控制器如何实现的

主机nginx 一般nginx做主机反向代理(网关)有以下配置 upstream order{ se....
的头像 Linux爱好者 发表于 09-01 14:44 869次 阅读
一文透析Nginx-ingress 控制器如何实现的

代码中是数学图像解法和贪心解法

今天讲一个贪心的老司机的故事,就是力扣第 134 题「加油站」: 题目应该不难理解,就是每到达一个站....
的头像 新材料在线 发表于 09-01 14:14 197次 阅读
代码中是数学图像解法和贪心解法

如何才能够翻转二叉树

这道题目是非常经典的题目,也是比较简单的题目(至少一看就会)。 但正是因为这道题太简单,一看就会,一....
的头像 新材料在线 发表于 09-01 11:45 221次 阅读

Python 代码加速运行的的小技巧

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Android编程精选 发表于 09-01 11:28 245次 阅读

K8S集群服务访问失败怎么办 K8S故障处理集锦

问题1:K8S集群服务访问失败?     原因分析:证书不能被识别,其原因为:自定义证书,过期等。 ....
的头像 开关电源芯片 发表于 09-01 11:11 250次 阅读
K8S集群服务访问失败怎么办 K8S故障处理集锦

华为p50可以升级鸿蒙系统吗

自从备受关注的鸿蒙系统发布后,越来越多的机型都支持鸿蒙系统升级,最近华为公司最新发布的华为P50系列....
的头像 lhl545545 发表于 08-31 16:05 1430次 阅读