核心原理
无论是哪种方法,其基本流程都是:
- 创建一个HTTP请求:指定要访问的PHP网页URL。
- 发送请求:将请求发送到服务器。
- 接收响应:服务器处理PHP脚本后,会返回HTML/文本内容(也就是我们想要的“源码”)。
- 处理响应:在易安卓的事件中,将接收到的内容显示出来。
使用网络请求扩展(推荐,最稳定)
这是最常用、最稳定的方法,通过安装一个名为 网络请求 的第三方扩展来实现,它封装了复杂的网络操作,使用起来非常简单。
第一步:安装“网络请求”扩展
- 打开你的易安卓项目。
- 点击顶部菜单栏的 工具 -> 扩展管理器。
- 在扩展管理器中,找到 网络请求 扩展,点击 安装。
- 安装完成后,重启易安卓,这样扩展才能生效。
第二步:设计界面
在设计器中,拖拽以下组件:
- 一个
按钮,用于触发获取源码的操作,将其文本属性改为“获取网页源码”。 - 一个
文本框,用于显示获取到的源码,将其多行属性勾选上,这样源码可以换行显示。
第三步:编写代码逻辑
双击“获取网页源码”按钮,进入其 被单击 事件,编写以下代码:
' 导入网络请求扩展
导入 网络请求
' 定义一个全局变量来存储请求对象,方便在多个事件中访问
全局 网络请求.请求对象 = 网络请求.创建请求()
' --- 按钮被单击事件 ---
事件 按钮1.被单击()
' 1. 设置请求的URL(请替换成你自己的PHP网址)
网络请求.请求对象.设置地址("http://example.com/your_php_file.php")
' 2. 设置请求方法(GET或POST,获取源码通常用GET)
网络请求.请求对象.设置方法("GET")
' 3. 发送请求(第二个参数是“是否在子线程中执行”,为True可以避免阻塞主界面)
网络请求.请求对象.发送(True)
' 提示用户正在加载
提示框.显示("正在获取数据,请稍候...", "提示")
结束 事件
' --- 网络请求完成事件 ---
' 这个事件会在请求成功或失败后自动触发
事件 网络请求.请求对象.完成(响应码, 响应内容)
' 判断响应码,200表示成功
响应码 = 200 则
' 将获取到的源码(响应内容)显示到文本框中
文本框1.文本 = 响应内容
' 提示成功
提示框.显示("获取成功!", "成功")
否则
' 如果失败,显示错误信息
文本框1.文本 = "请求失败,响应码: " & 响应码
提示框.显示("获取失败!", "错误")
结束
结束 事件
代码解释:
导入 网络请求: 告诉易安卓我们要使用这个扩展。全局 网络请求.请求对象 = 网络请求.创建请求(): 创建一个请求对象,我们所有的网络操作都基于这个对象,使用全局变量是为了在完成事件中也能访问到它。按钮1.被单击(): 当用户点击按钮时,这里面的代码会执行。网络请求.请求对象.设置地址(...): 这是最重要的一步,请务必将"http://example.com/your_php_file.php"替换成你自己的PHP网页地址。网络请求.请求对象.发送(True): 发送请求。True表示在后台线程(子线程)中执行,这样可以防止网络请求耗时过长导致程序界面卡死(即“ANR”错误)。网络请求.请求对象.完成(...): 这是一个关键事件,当网络请求结束后(无论成功或失败),这个事件会被自动触发。响应码: 服务器返回的状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。- : 服务器返回的实际数据,也就是我们想要的PHP网页源码。
- 我们在这里判断
响应码,如果是200,就把放到文本框1里。
使用Java代码调用(更灵活,适合有安卓基础的用户)
如果你需要更底层的控制,或者想使用一些网络请求扩展不支持的特性,可以直接调用安卓原生的Java代码。
第一步:设计界面
与方法一完全相同,需要一个按钮和一个多行文本框。
第二步:编写代码逻辑
双击“获取网页源码”按钮,进入其 被单击 事件,编写以下代码:
' 导入Java相关类
导入 android.os
导入 java.net
导入 java.io
' --- 按钮被单击事件 ---
事件 按钮1.被单击()
' 在子线程中执行网络请求,避免阻塞UI
启动线程({
' 定义一个变量来存储结果
局部 源码 = ""
' 使用 try-catch 来捕获可能的网络异常
尝试
' 1. 创建URL对象
局部 url = URL.创建("http://example.com/your_php_file.php") ' 请替换成你的PHP网址
' 2. 打开连接
局部 连接 = url.打开连接()
' 3. 获取输入流
局部 输入流 = 连接.获取输入()
' 4. 使用 BufferedReader 逐行读取内容
局部 读取器 = BufferedReader.创建(输入流, "UTF-8")
局部 行 = ""
循环 (行 = 读取器.读取行() ) 不为 空
源码 = 源码 & 行 & #换行符
结束 循环
' 5. 关闭流
读取器.关闭()
输入流.关闭()
' 6. 通过 处理程序 将结果返回到主线程更新UI
处理程序.运行({
' 将获取到的源码显示到文本框中
文本框1.文本 = 源码
提示框.显示("获取成功!", "成功")
})
捕获 异常 e
' 如果发生错误,在主线程提示
处理程序.运行({
文本框1.文本 = "发生错误: " & e.获取消息()
提示框.显示("获取失败!", "错误")
})
结束 尝试
})
结束 事件
代码解释:
导入 ...: 导入安卓系统提供的网络和IO相关的Java类。启动线程({...}): 网络操作不能在主线程(UI线程)中执行,否则会报错。启动线程会在一个新的后台线程中运行括号里的代码。try-catch: 网络请求非常不稳定,可能会因为无网络、服务器无响应等原因抛出异常。try-catch可以捕获这些异常,防止程序崩溃。URL.创建(...): 创建一个URL对象,同样需要替换成你自己的PHP网址。连接.获取输入(): 获取一个输入流,通过这个流我们可以读取服务器返回的数据。BufferedReader.读取行(): 高效地一行一行读取文本内容,并拼接起来。处理程序.运行({...}): 这是非常重要的一步!后台线程不允许直接操作UI组件(比如修改文本框1的文本)。处理程序.运行可以将一段代码提交到主线程去执行,从而安全地更新UI。
重要注意事项
-
网络权限: 你的APP必须声明网络权限才能访问互联网,在易安卓中,打开
项目->项目配置->清单文件,确保有以下内容:<uses-permission android:name="android.permission.INTERNET" />
在
项目配置->通用设置中,勾选 允许使用明文流量 (如果你的PHP网站是http而不是https,这个选项通常需要勾选)。 -
PHP网址: 代码中的示例网址
http://example.com/your_php_file.php是无效的,你必须将其替换为你自己服务器上真实的PHP文件地址。http://myserver.com/get_data.php。 -
HTTPS与HTTP:
- HTTP: 不安全,但配置简单,如果目标网站是HTTP,且你的APP是
targetSdkVersion 28或更高,可能需要在清单文件中添加android:usesCleartextTraffic="true"。 - HTTPS: 安全,现代网站的标准,如果你的PHP网站是HTTPS,方法一和方法二都能很好地工作,无需额外配置。
- HTTP: 不安全,但配置简单,如果目标网站是HTTP,且你的APP是
-
子线程与UI更新: 记住一个黄金法则:所有耗时操作(网络、文件读写等)都必须在子线程中完成,所有UI更新操作都必须在主线程中完成,方法一通过扩展帮我们处理了这一点,方法二则需要我们自己通过
处理程序来实现。
| 特性 | 方法一 (网络请求扩展) | 方法二 (Java代码) |
|---|---|---|
| 易用性 | 非常高,代码简单,适合初学者。 | 较低,需要了解Java异常处理和线程。 |
| 稳定性 | 非常稳定,由社区维护,经过大量测试。 | 依赖开发者自身代码质量,容易出现错误。 |
| 灵活性 | 一般,满足大部分获取源码的需求。 | 非常高,可以调用任何安卓原生API。 |
| 推荐人群 | 所有用户,特别是初学者。 | 有安卓开发经验,需要特殊网络功能的用户。 |
对于绝大多数获取PHP网页源码的需求,强烈推荐使用方法一,它简单、可靠且高效。
