这个例程的源码已上传
运行截图
布局文件
载入布局文件
B4A网络编程,如果是涉及到PHP+MYSQL,那么需要一些PHP基础知识,最主要的是掌握面对对象操作数据库(PHP版本从6.0左右开始,已不建议用面向过程操作数据库,而是建议用面向对象操作数据库。)里面的数据库连接,SQL查询语句的简单用法,反正不需要掌握太深的PHP知识。
PHP文件内容如下
<?php
/* 接收B4A发过来的变量
与B4A进行数据交换的PHP文件中,若PHP用$_GET去接收B4A通过job.Download()方式发过来的变量,
会造成PHP文件无法识别变量,PHP得用$_REQUEST去接收B4A发过来的变量,
否则JobDone事件中,job.Success = False ,错误信息如下
org.apache.http.conn.HttpHostConnectException: Connection to http://279487ka23.wicp.vip refused
*/
// 获取用户提交的用户名和密码,$_REQUEST右侧的变量名字
//就是B4A发送给PHP的变量,具体查看B4A代码中的函数btnLogin_Click
$username = $_REQUEST['user_id'];
$password = $_REQUEST['password'];
// 模拟数据库中的用户名和密码
//你也可以通过SQL去查询MYSQL数据,并返回查到的记录,这里只是简单的演示
$valid_username = 'example_user';
$valid_password = 'example_password';
// 验证用户名和密码是否匹配
if ($username === $valid_username && $password === $valid_password) {
// 这输出的内容,就是返回给B4A的内容。
//B4A代码的事件JobDone里面用Job.GetString 接收这些返回的数据
echo "OK";
} else {
// 这输出的内容,就是返回给B4A的内容
echo "fail";
}
?>
Main模块代码如下
#Region Project Attributes
#ApplicationLabel: HTTP Login
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
' 这些控件是放置在布局文件frmlogin.bal
' 所以不必初始化,也不必用active.addview方法添加到屏幕
Private btnLogin As Button
Private Label1 As Label
Private Label2 As Label
Private Label3 As Label
Private Panel1 As Panel
Private txtPassword As EditText
Private txtUserID As EditText
End Sub
Sub Activity_Create(FirstTime As Boolean)
'载入布局文件
Activity.LoadLayout("frmlogin")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
'点击登录按钮
Sub btnLogin_Click
Dim strUsername As String = txtUserID.Text.Trim
If strUsername = "" Then
Msgbox("Please enter User ID", "Error")
Return
End If
Dim strPassword As String = txtPassword.Text.Trim
If strPassword = "" Then
Msgbox("Please enter Password", "Error")
Return
End If
'HttpJob类可实现网络编程,比如向PHP文件发送查询语句等等
Dim job1 As HttpJob
job1.Initialize("Login", Me)
'B4A允许你使用符号 _ 让一个字符串分成多行
job1.Download2("http://kbase.herobo.com/login.php", _
Array As String("user_id",strUsername,"password",strPassword))
' 等待状态
ProgressDialogShow("正在验证中...")
End Sub
'HttpJob对象事件,执行Download2方法时触发
Sub JobDone (Job As HttpJob)
' 隐藏等待
ProgressDialogHide
' 日志页面输出内容
Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
' Job.Success = True 代表访问PHP成功,并成功返回数据
If Job.Success = True Then
Dim strReturn As String
Log(Job.GetString)
' Job.GetString 用于获取返回的数据
strReturn = Job.GetString
Label3.Text = strReturn
Else
' 无法访问PHP
Log("Error: " & Job.ErrorMessage)
ToastMessageShow("Error: " & Job.ErrorMessage, True)
End If
Job.Release
End Sub