Save JSON files.. Loading Crash!? (Fixed!)
Monkey Forums/Monkey Programming/Save JSON files.. Loading Crash!? (Fixed!)
| ||
| [edit: I was using v85a, this has been fixed in later versions of MX (tested on v86e), it was working on v79 though!] Hi All, I'm saving and loading IAP on Android using the following methods: Load: Method LoadPurchases:Void()
#If TARGET="android" or TARGET="ios"
Local f:filestream.FileStream = filestream.FileStream.Open("monkey://internal/.purchases", "r")
If ( Not f) Return
Local json:String = f.ReadString()
Print("LoadPurchases: Json = " + json)
_purchases = New JsonObject(json)
If _purchases.GetBool(NON_CONSUMABLES[REMOVE_ADS], False) = True
disableAds = True
End
f.Close()
#End
End
Save:
Method SavePurchases:Void()
Local f:filestream.FileStream = filestream.FileStream.Open("monkey://internal/.purchases", "w")
If ( Not f) Error "Unable to save purchases"
Local json:String = _purchases.ToJson()
Print("SavePurchases: Json = " + json)
f.WriteString(json)
Print("Finished writing string...")
f.Close()
Print("Closed the file")
End
Within the output of SavePurchases: I/[Monkey](15278): SavePurchases: Json = {"coins1000":1}
I/[Monkey](15278): Finished writing string...
I/[Monkey](15278): Closed the file
I/[Monkey](15278): Bought Coins...All good... but when loading I get this: I/[Monkey](10944): LoadPurchases: Json = {"coins1000
--------- beginning of crash
E/AndroidRuntime(10944): FATAL EXCEPTION: GLThread 14901
E/AndroidRuntime(10944): Process: com.therevillsgames.csusatripeaks, PID: 10944
E/AndroidRuntime(10944): com.therevillsgames.csusatripeaks.c_JsonError: Uncaught Monkey ExceptionBecause the JSON is invalid... but I dont know why as the Save outputs valid JSON :( The default encoding for write/read string is utf8. Any ideas? Cheers, Steve |
| ||
And heres the log when saving/loading a boolean:I/[Monkey]( 8401): BuyProductComplete, result = 0
I/[Monkey]( 8401): SavePurchases: Json = {"removeads":true}
I/[Monkey]( 8401): Finished writing string...
I/[Monkey]( 8401): Closed the file
I/[Monkey]( 8401): Bought RemoveAds...I/[Monkey]( 9872): LoadPurchases: Json = {"removeads":t
--------- beginning of crash
E/AndroidRuntime( 9872): FATAL EXCEPTION: GLThread 15386
E/AndroidRuntime( 9872): Process: com.therevillsgames.csusatripeaks, PID: 9872
E/AndroidRuntime( 9872): com.therevillsgames.csusatripeaks.c_JsonError: Uncaught Monkey Exception |
| ||
| Runnable example code: |
| ||
| Can you check the file ".purchases“? Is the string correctly written as UTF8? - If not, it’s probably a problem in the UTF8 encoder -> DataBuffer.PokeString() - If yes, it may be a problem in the UTF8 decoder -> DataBuffer.PeekString() As a test for a workaround, can you try to use f.WriteString(json, "ascii“) and f.ReadString("ascii“) ? |
| ||
| Hey Danilo, I've just tried the ascii encoding and I get the same issue. Error log: I/[Monkey](21435): Saving...ascii
I/[Monkey](21435): SavePurchases: Json = {"removeAds":true}
I/[Monkey](21435): Finished writing string...
I/[Monkey](21435): Closed the file
E/MotoNetwCtrlr( 1359): getDataController: No data sim selected
E/MotoNetwCtrlr( 1359): getDataController: No data sim selected
I/[Monkey](21435): Loading...ascii
I/[Monkey](21435): LoadPurchases: Json = {"removeAds":t
I/[Monkey](21435): Monkey Runtime Error : Uncaught Monkey ExceptionDo you know where the file is located? |
| ||
| GHAHAHAHAHAAA!!!!!AARRGHGHGHHG!!! I was using Monkey v85a... so I thought I would try the latest version 86e and it works!!!! The last time I messed with IAP was back on v79d. |
| ||
| Nice. Happy Easter! :) |
| ||
| Thanks Danilo, you too :) |
| ||
| Yay! |