实验六:Android的网络编程基础

实验六:Android 的网络编程基础

6.1 实验目的

本次实验的目的是让大家熟悉 Android 开发中的如何获取天气预报,包括了

解和熟悉 WebView、WebService 使用、网络编程事件处理等内容。

6.2 实验要求

  • 熟悉和掌握 WebView 使用

  • 了解 Android 的网络编程

  • 熟悉和掌握 WebService 使用

6.3 实验内容

【练习 6.1】基于 Webview 的获取天气预报

1. 项目结构

项目名:WebViewWeather

项目结构:

  • res/layout/activity_main.xml:主布局文件
  • res/values/strings.xml:字符串资源文件
  • src/com/example/webview/MainActivity.java:主Activity文件
  • AndroidManifest.xml:Android清单文件
2. 主布局文件 (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:gravity="center_horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><!-- 按钮布局 --><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!-- 按钮:北京 --><Buttonandroid:id="@+id/bj"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/bj"android:textSize="30dp" /><!-- 按钮:上海 --><Buttonandroid:id="@+id/sh"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/sh"android:textSize="30dp" /><!-- 按钮:哈尔滨 --><Buttonandroid:id="@+id/heb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/heb"android:textSize="30dp" /></LinearLayout><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"><!-- 按钮:广州 --><Buttonandroid:id="@+id/gz"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/gz"android:textSize="30dp" /><!-- 按钮:长春 --><Buttonandroid:id="@+id/cc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/cc"android:textSize="30dp" /><!-- 按钮:沈阳 --><Buttonandroid:id="@+id/sy"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/sy"android:textSize="30dp"android:layout_gravity="right" /></LinearLayout><!-- WebView组件 --><WebViewandroid:id="@+id/webView1"android:layout_width="match_parent"android:layout_height="0dip"android:focusable="false"android:layout_weight="1"/>
</LinearLayout>
3. 字符串资源文件 (strings.xml)
<resources><string name="app_name">WebViewWeather</string><string name="go">GO</string><string name="bj">北京</string><string name="sh">上海</string><string name="gz">广州</string><string name="heb">哈尔滨</string><string name="cc">长春</string><string name="sy">沈阳</string>
</resources>
4. 主Activity文件 (MainActivity.java)
package com.example.webviewweather;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView = (WebView) findViewById(R.id.webView1);webView.getSettings().setJavaScriptEnabled(true);webView.setWebChromeClient(new WebChromeClient());webView.setWebViewClient(new WebViewClient());webView.loadUrl("http://m.weather.com.cn/mweather/");webView.setInitialScale(57  4);Button bj = (Button) findViewById(R.id.bj);bj.setOnClickListener(this);Button sh = (Button) findViewById(R.id.sh);sh.setOnClickListener(this);Button heb = (Button) findViewById(R.id.heb);heb.setOnClickListener(this);Button cc = (Button) findViewById(R.id.cc);cc.setOnClickListener(this);Button sy = (Button) findViewById(R.id.sy);sy.setOnClickListener(this);Button gz = (Button) findViewById(R.id.gz);gz.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.bj:openUrl("101010100");break;case R.id.sh:openUrl("101020100");break;case R.id.heb:openUrl("101050101");break;case R.id.cc:openUrl("101060101");break;case R.id.sy:openUrl("101070101");break;case R.id.gz:openUrl("101280101");break;}}private void openUrl(String id) {webView.loadUrl("http://m.weather.com.cn/mweather/" + id + ".shtml");}
}
5. Android清单文件 (AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.webview" ><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>
6.运行效果

image-20231116232704967


【练习 6.2】基于 WebService 的手机归属地查询

1. 添加 ksoap2-android 库
  1. 在 ksoap2-android 的项目下载网站 下载 ksoap2-android-assembly-2.4-jar-with-dependencies.jar

    • 如果难以下载,可以在随书光盘中找到该 JAR 包。
  2. 将下载的 ksoap2-android JAR 包添加到工程的 lib 目录下。

  3. 右键点击 JAR 包,选择 “Add as library”,将 ksoap2-android 集成到 Android 项目中。

2. WebService 配置
  1. 打开 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx。

  2. 点击 “getMobileCodeInfo” 进入说明页,获取以下关键信息:

    • 作用域 TargetNameSpace = http://WebXml.com.cn/
    • 查询的方法名为 “getMobileCodeInfo”,需要带上 “mobileCode” 与 “userID” 两个参数。
    • 返回的结果存在 “getMobileCodeInfoResult” 中。
  3. 在 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 可以访问其 WSDL 说明。

3. 资源文件布局
  1. 创建 activity_web_client.xml 文件,定义界面布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context="com.example.webservicephonelocationlookup.WebClient"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="输入手机号:" /><EditTextandroid:layout_width="150dp"android:layout_height="wrap_content"android:id="@+id/etphone" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="搜索"android:id="@+id/btnsearch" /></LinearLayout><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查询结果:" /><TextViewandroid:id="@+id/tvinfo"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>
4. Java 代码
  1. 创建 WebClient.java 文件,实现 WebService 调用逻辑。
package com.example.webservicephonelocationlookup;import android.os.AsyncTask;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;public class WebClient extends AppCompatActivity {private static final String SERVER_URL = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";private static final String NAMESPACE = "http://WebXml.com.cn/";private static final String METHOD_NAME = "getMobileCodeInfo";private EditText etPhone;private Button btnSearch;private TextView tvInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_client);etPhone = (EditText) findViewById(R.id.etphone);btnSearch = (Button) findViewById(R.id.btnsearch);tvInfo = (TextView) findViewById(R.id.tvinfo);btnSearch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String phoneNumber = etPhone.getText().toString();if (phoneNumber.length() > 0) {getPhoneLocation(phoneNumber);}}});}private void getPhoneLocation(String phoneNumber) {new AsyncTask<String, Void, String>() {@Overrideprotected String doInBackground(String... params) {String location = "";final HttpTransportSE httpSe = new HttpTransportSE(SERVER_URL);httpSe.debug = true;SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);soapObject.addProperty("mobileCode", params[0]);soapObject.addProperty("userID", "");final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);envelope.setOutputSoapObject(soapObject);envelope.dotNet = true;// 获取返回信息try {httpSe.call(NAMESPACE + METHOD_NAME, envelope);if (envelope.getResponse() != null) {SoapObject result = (SoapObject) envelope.bodyIn;location = result.getProperty("getMobileCodeInfoResult").toString();}} catch (XmlPullParserException | SoapFault | IOException e) {e.printStackTrace();}return location;}@Overrideprotected void onPostExecute(String result) {tvInfo.setText(result);}}.execute(phoneNumber);}
}
5. AndroidManifest.xml 配置
  1. AndroidManifest.xml 中添加 INTERNET 权限。
<uses-permission android:name="android.permission.INTERNET"/>
  1. 配置应用程序的入口 Activity。
<activity android:name="com.example.webservice.WebClient"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>
6. 运行效果
  • 在模拟器或真机上运行应用程序,输入手机号码,点击搜索按钮,查看查询结果。

image-20231117151014751


【拓展】编写 Android 程序,实现使用系统内置游览器打开指定网页。

步骤 1: 创建新项目
  1. 打开 Android Studio,选择 “Start a new Android Studio project”。
  2. 选择 “Empty Activity” 模板,点击 “Next”。
  3. 命名项目为 “WebBrowserDemo”,选择语言为 “Java”,点击 “Finish”。
步骤 2: 修改布局文件
  1. 打开 activity_main.xml 文件,用以下代码替换其中的内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_horizontal"android:orientation="vertical"><EditTextandroid:id="@+id/ed"android:layout_width="match_parent"android:layout_height="200px"></EditText><Buttonandroid:id="@+id/bu1"android:layout_width="286dp"android:layout_height="wrap_content"android:text="Go" /><WebViewandroid:id="@+id/webView1"android:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"android:focusable="false" />
</LinearLayout>
步骤 3: 编写 Java 代码
  1. 打开 MainActivity.java 文件,用以下代码替换其中的内容:
package com.example.webbrowserdemo;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity{private WebView webView; //声明 WebView 组件的对象String url="";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView=(WebView)findViewById(R.id.webView1); //获取WebView 组件webView.getSettings().setJavaScriptEnabled(true); //设置 JavaScript可用webView.setWebChromeClient(new WebChromeClient()); //处理JavaScript 对话框webView.setWebViewClient(new WebViewClient()); //处理各种通知和请求事件,如果不使用该句代码,将使用内置浏览器访问网页webView.setInitialScale(57*4); //放网页内容放大 4 倍Button bu1=(Button)findViewById(R.id.bu1);EditText editText=findViewById(R.id.ed);bu1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {url=editText.getText().toString();openUrl(url);}});}//打开网页的方法private void openUrl(String id){if (!url.equals("")){webView.loadUrl("http://"+id+"/"); //}else {Toast.makeText(this,"网址不能为空",Toast.LENGTH_LONG).show();}}
}
步骤 4: 运行应用
  1. 运行应用程序,点击 “打开网页” 按钮。

  2. 系统将使用内置浏览器打开指定网页。

    image-20231117171143765

【拓展】编写 Android 程序,实现从指定网站下载文件。

步骤 1: 创建新的 Android 项目
  1. 打开 Android Studio。
  2. 选择 “Start a new Android Studio project”。
  3. 选择 “Empty Activity” 模板,然后点击 “Finish”。
步骤 2: 修改布局文件

打开 res/layout/activity_main.xml 文件,并使用以下 XML 代码替换默认的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/downloadButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="下载文件" />
</RelativeLayout>
步骤 3: 在 MainActivity.java 中添加代码

打开 MainActivity.java 文件,修改 onCreate 方法和添加新的方法:

package com.example.filedownloader;import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class MainActivity extends AppCompatActivity {private static final String DOWNLOAD_URL = "https://image.baidu.com/search/detail?ct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=%E7%99%BE%E5%BA%A6%E5%9B%BE%E7%89%87&step_word=&lid=7733045057659531704&ie=utf-8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined&copyright=undefined&cs=505978886,3280506511&os=2821336839,1523677687&simid=3395585618,291075366&pn=0&rn=1&di=7264239678495129601&ln=1594&fr=&fmq=1700213057065_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=0,0&istype=0&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=1e&objurl=https%3A%2F%2Fp3.itc.cn%2Fq_70%2Fimages03%2F20211117%2F1270baf1c2f84fa19a99ef82c52d454c.png&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwxLDIsMyw2LDQsNSw4LDcsOQ%3D%3D";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button downloadButton = findViewById(R.id.downloadButton);downloadButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new DownloadFileTask().execute(DOWNLOAD_URL);}});}private class DownloadFileTask extends AsyncTask<String, Void, Boolean> {@Overrideprotected Boolean doInBackground(String... urls) {String fileUrl = urls[0];try {URL url = new URL(fileUrl);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();InputStream inputStream = urlConnection.getInputStream();int totalSize = urlConnection.getContentLength();int downloadedSize = 0;byte[] buffer = new byte[1024];int bufferLength;String fileName = "示例图片.png"; // 文件保存的名称FileOutputStream fileOutputStream = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + "/" + fileName);while ((bufferLength = inputStream.read(buffer)) > 0) {fileOutputStream.write(buffer, 0, bufferLength);downloadedSize += bufferLength;}fileOutputStream.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}@Overrideprotected void onPostExecute(Boolean result) {if (result) {Toast.makeText(MainActivity.this, "文件下载成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "文件下载失败", Toast.LENGTH_SHORT).show();}}}
}
步骤 4: 添加 Internet 和存储权限

确保在 AndroidManifest.xml 文件中添加了 Internet 和存储权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
步骤 5: 运行应用

image-20231117172551780

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop学习总结(MapRdeuce的词频统计)

MapRdeuce编程示例——词频统计 一、MapRdeuce的词频统计的过程 二、编程过程 1、Mapper 组件 WordcountMapper.java package com.itcast.mrdemo;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

网站页头被挂马状态及新增了index.html文件解决思路

今天网站刚新增了篇了文章《从nginx层阻断可执行的php 防止宝塔站点挂马》,整体测试下来还是不靠谱,设置后导致所有PHP文件都打不开了。 经过不断的查看日志和搜索办法总算告一段落,后续待观察。原因如下,多个网站目录新增了index.html文件,看时间是近两天上传的。 网站代…

微信小程序动态生成表单来啦!你再也不需要手写表单了!

dc-vant-form 由于我们在小程序上涉及到数据采集业务&#xff0c;需要经常使用表单&#xff0c;微信小程序的表单使用起来非常麻烦&#xff0c;数据和表单是分离的&#xff0c;每个输入框都需要做数据处理才能实现响应式数据&#xff0c;所以我开发了dc-vant-form&#xff0c;…

【开源】基于Vue.js的社区买菜系统的设计和实现

项目编号&#xff1a; S 011 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S011&#xff0c;文末获取源码。} 项目编号&#xff1a;S011&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

【uniapp】 video视频层级、遮挡其他弹窗或顶部导航 使用nvue覆盖

uniapp 顶部导航和弹窗被video遮挡解决办法 第一步&#xff1a;配置 subNVues {"path": "pages/index/index","style": {"navigationBarTitleText": "uni-app","navigationStyle": "custom","app-…

对话芯动科技 | 助力云游戏 4K级服务器显卡的探索与创新

2021年芯动科技推出了基于IMG BXT GPU IP的风华1号显卡。单块风华1号显卡可在台式机和云游戏中实现4K级别的性能&#xff0c;渲染能力达到5 TFLOPS&#xff0c;如果在服务器中同时运行两块显卡&#xff0c;性能还可翻倍。该显卡是为不断扩大的安卓云游戏市场量身定制的&#xf…

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态

2023年11月 NearCon2023 活动期间&#xff0c;基于 Cosmos SDK 构建的隐私协议 Secret Network&#xff0c;宣布使用 Octopus Network 开发的 NEAR-IBC&#xff0c;于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…

[C国演义] 哈希的使用和开闭散列的模拟实现

哈希的使用和开闭散列的模拟实现 1. 使用1.1 unordered_map的接口1.2 unordered_set的接口 2. 哈希底层2.1 概念2.2 解决哈希冲突 3. 实现3.1 开放寻址法3.2 拉链法 1. 使用 1.1 unordered_map的接口 构造 void test1() {// 空的unordered_map对象unordered_map<int, in…

动态头像如何制作?这个方法请收藏

照片是记录生活的一种方式&#xff0c;但是静态图片有时候不能够完全表达我们的情感。而动态的图片能够让图片以更生动的方式来展示我们的想象力和内心情感。那么&#xff0c;大家知道动态图片制作的方法有哪些吗&#xff1f;使用gif动画制作&#xff08;https://www.gif.cn/&a…

React项目首页中用canvas实现星空

文章目录 前言代码使用后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;感谢大家…

机器学习笔记 - 隐马尔可夫模型的简述

隐马尔可夫模型是一个并不复杂的数学模型,到目前为止,它一直被认为是解决大多数自然语言处理问题最为快速、有效的方法。它成功地解决了复杂的语音识别、机器翻译等问题。看完这些复杂的问题是如何通过简单的模型得到描述和解决,我们会由衷地感叹数学模型之妙。 人类信息交流…

数据结构与算法设计分析——常用搜索算法

目录 一、穷举搜索二、图的遍历算法&#xff08;一&#xff09;深度优先搜索&#xff08;DFS&#xff09;&#xff08;二&#xff09;广度优先搜索&#xff08;BFS&#xff09; 三、回溯法&#xff08;一&#xff09;回溯法的定义&#xff08;二&#xff09;回溯法的应用 四、分…

EfficientNet:通过模型效率彻底改变深度学习

一、介绍 EfficientNet 是深度学习领域的里程碑&#xff0c;代表了神经网络架构方法的范式转变。EfficientNet 由 Google Research 的 Mingxing Tan 和 Quoc V. Le 开发&#xff0c;在不影响性能的情况下满足了对计算高效模型不断增长的需求。本文深入探讨了 EfficientNet 背后…

百度搜索智能化算力调控分配方法

作者 | 泰来 导读 随着近年深度学习技术的发展&#xff0c;搜索算法复杂度不断上升&#xff0c;算力供给需求出现了爆发式的增长。伴随着AI技术逐步走到深水区&#xff0c;算法红利在逐步消失&#xff0c;边际效应日益显著&#xff0c;算力效能的提升尤为重要&#xff0c;同时随…

视频修复软件 Aiseesoft Video Repair mac中文版功能

AIseesoft Video RepAIr mac是一款专业的视频修复软件&#xff0c;主要用于修复损坏或无法播放的视频文件。AIseesoft Video RepAIr是一个功能强大的程序,可以帮助恢复丢失或损坏的数据的视频。只要您以相同的格式提供示例视频,并在功能强大的技术的支持下,只需单击几下即可收获…

智能配电系统解决方案

智能配电系统解决方案是一种集成了先进技术和智能化功能的配电系统&#xff0c;它能够提高电力系统的效率、可靠性和安全性。力安科技智能配电系统解决方案依托电易云-智慧电力物联网&#xff0c;具体实施的方案如下&#xff1a; 智能化设备和传感器&#xff1a;采用智能化的开…

「Java开发指南」如何在Spring中使用JAX-WS注释器?

本文将指导您如何使用JAX-WS注释器从Spring服务生成JAX-WS Web服务&#xff0c;在本教程中&#xff0c;您将学习如何&#xff1a; 为Spring服务启用JAX-WS部署应用程序并测试服务 所有与Spring scaffolding相关的任务都需要MyEclipse Spring或Bling授权。 MyEclipse v2023.1…

MapApp 地图应用

1. 简述 1.1 重点 1&#xff09;更好地理解 MVVM 架构 2&#xff09;更轻松地使用 SwiftUI 框架、对齐、动画和转换 1.2 资源下载地址: Swiftful-Thinking:https://www.swiftful-thinking.com/downloads 1.3 项目结构图: 1.4 图片、颜色资源文件图: 1.5 启动图片配置图: 2. Mo…

前端JS 使用input完成文件上传操作,并对文件进行类型转换

使用input实现文件上传 // 定义一个用于文件上传的按钮<input type"file" name"upload1" />// accept属性用于定义允许上传的文件类型&#xff0c; onchange用于绑定文件上传之后的相应函数<input type"file" name"upload2"…

2013年11月10日 Go生态洞察:Go语言四周年回顾

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…