很多电脑软件带有一个配置文件,用来保存软件运行中的参数,通过读写配置文件来改变软件的参数。B4A没有提供对配置文件读写的方法,需要自创。当然也有的人采用SQLITE数据库作为配置文件保存参数。
模块器里的运行截图
布局文件 balmain.bal
Main窗体代码如下
#Region Project Attributes
#ApplicationLabel: 读写配置文件
#VersionCode: 1
#VersionName:
'SupportedOrientations(支持的方向) 值可以是:
'unspecified(未指定), landscape(纵向)或portrait(横向)。
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'这里声明的全局变量在应用启动时被使用。
'这里声明的变量能被所有模块使用。
End Sub
Sub Globals
'这里的声明的全局变量在Activity 创建时声明。
'这里声明的变量只能在此模块使用。
'布局文件里放置了一个文本编辑控件和两个按钮控件
Dim btRead As Button
Dim btWrite As Button
Dim edtText As EditText
End Sub
Sub Activity_Create(FirstTime As Boolean)
'载入一个布局文件
Activity.LoadLayout("balmain.bal")
btRead.Text="读配置文件"
btWrite.Text="写配置文件"
'提示文本
edtText.Height = "输入要写到配置文件的数据"
edtText.Left=0
edtText.Width=100%x
edtText.Gravity=Gravity.CENTER
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
'读配置项
'代码来自官网
'https://www.b4x.com/android/forum/threads/any-ini-file-for-android.7680/
'函数参数如下
'mykey - 配置项名称
'myvalue - 配置项值
'fPath - 配置文件路径
'filename - 配置文件名称(包括文件主名和后缀)
Sub WriteIni(mykey As String,myvalue As String,fPath As String,filename As String) '写配置项
Dim Map1 As Map
Map1.Initialize '初始化变量 Map1
If File.Exists(fPath,filename) Then'File.Exists用来判断指定的文件是否存在
'如果文件存在,不作处理
Else
File.WriteMap(fPath, filename, Map1) '创建这个文件
' File.WriteMap 将创建新的文件,并用给定映射来写.每个键值对写单行.
' 可以用File.ReadMap 读取这个文件.
' 每个值会被转为字符串. 有点像控件的属性格式.
End If
Map1 = File.ReadMap(fPath,filename)
' File.ReadMap 读映射文件,并解释每行的键值对(或字符串). 记住在映射里的项目也许不同于文件里的.
'按mykey=myvalue的格式保存到映射文件里
Map1.Put(mykey, myvalue)
'用 File.WriteMap命令把刚才的mykey=myvalue 写到文件filename中,从而实现配置文件的写入操作
File.WriteMap(fPath, filename, Map1)
ToastMessageShow("成功写入配置文件",True)
End Sub
'在配置文件里,读取指定的配置项目值
Sub ReadIni(key As String,fPath As String,filename As String)
Dim Map1 As Map
Map1.Initialize'初始化变量 Map1
'可以直接把下面这句代码理解成读取指定文件的数据并保存到一个一维数组中,把Map1看成一个一维的数组就行了
Map1 = File.ReadMap(fPath,filename)
'Map1.Size 可理解成数组变量中的元素数量
'下面通过一个循环语句依次去读取数组Map1中的每一个元素值
For i = 0 To Map1.Size - 1
If Map1.GetKeyAt(i) = key Then
'如果读到到的项目名称与所要读取的配置项目名称一致,就去读取这个项目名称的值,
'然后运用Return跳出这个SUB方法
ToastMessageShow("成功读取配置文件",True)
' Return Map1.GetValueAt(i)
End If
'如果没有找到此配置项就返回空白
ToastMessageShow("配置文件中找不到指定的配置项名称",True)
Exit
Next
End Sub
'点击此按钮读配置文件
Sub btRead_Click
edtText.Text = ReadIni("HOST",File.DirDefaultExternal,"Test.ini")
'File.DirDefaultExternal 为外置默认目录,
'外置默认目录一般在sdcard卡对应包名称下的某目录,你可以查下B4A官网
End Sub
'点击此按钮写配置文件
Sub btWrite_Click
WriteIni("HOST", edtText.Text,File.DirDefaultExternal,"Test.ini")
End Sub