当两个地图仍处于打​​开状态时,如何使用B4A中的两个Map对象更新一个地图文件?

时间:2016-09-18 15:22:41

标签: android basic4android

当两个地图仍处于打​​开状态时,如何使用B4A中的两个地图对象更新一个地图文件? 我的代码是:

dim MapForUser1, MapForUser2 as Map<br>
MapForUser1 = File.ReadMap(File.DirInternal, "scores.dat")
MapForUser2 = File.ReadMap(File.DirInternal, "scores.dat")

一位用户更新了一些关键值113:

Dim s1 as String
s1 = MapForUser1.Get("113")  

此处更新s1然后删除密钥并添加具有相同密钥的新项目

MapForUser1.Remove("113")  
MapForUser1.Put("113", s1)  

File.WriteMap(File.DirInternal, "scores.dat", MapForUser1)

它在所有情况下都非常好用 如果第二用户更新相同密钥113的值:

Dim s2 as String
s2 = MapForUser2.Get("113")

此处更新s2然后删除密钥并添加具有相同密钥的新项目

MapForUser2.Remove("113")
MapForUser2.Put("113", s2)
File.WriteMap(File.DirInternal, "scores.dat", MapForUser2)

它在所有情况下都非常好用 它显示一切都很好,但第二个用户的更新被添加为新项目,而不是用键113更新现有项目

两个用户同时使用相同的App活动。如何在第一个用户已经打开文件的映射时正确管理第二个用户的更新。 第二个用户无法删除第一个用户首先更新但未关闭活动的相同密钥的项目。如果第一个用户关闭活动,然后第二个用户更新相同的项目,那么它正在工作。但是在映射中添加重复键是太可怕了。由于重复键,整个游戏都会崩溃很多次。请帮助解决一些有效的代码示例。

谢谢你 Rupali

1 个答案:

答案 0 :(得分:0)

MapForUser1MapForUser2是两个不同的地图,因此它们各自的"113"键已经是两个不同的数据集,但如果具有相同的键名简化了您的代码,那么您应该使用两个数据文件,每个用户一个允许独立更新。 File.WriteMap()在顺序文本文件中写入。 如果没有看到更多代码,很可能处理文件读/写操作并将其与两个用户同步会导致问题。

如果您坚持使用一个数据文件,最好使用随机访问文件。

RandomAccesFile.WriteObject(Object,Compress as Boolean,Position as Byte)

    Dim raf As RandomAccessFile
raf.initialize(File.DirRootExternal,"score.dat",False)

raf.WriteObject(MapForUser1,True,0)     'write from byte'
raf.WriteObject(MapForUser2,True,5000)  'write from byte 5000' 

raf.Close

然后阅读:

raf.initialize(File.DirRootExternal,"score.dat",False)


MapForUser1=raf.ReadObject(0)         'read from byte 0'
MapForUser2=raf.ReadObject(5000)       'read from byte 5000'

raf.Close

看看这里: https://b4x.com/android/forum/threads/write-2-map-views-to-a-single-txt-file.48974/