Android Question KeyvalueStore2 writes row but incomplete data

Discussion in 'Android Questions' started by Rusty, Feb 12, 2019.

  1. Rusty

    Rusty Well-Known Member Licensed User

    I am creating a KVS2 database. It gets created and when I add rows with a PUT
    Code:
    Sub Class_Globals
        
    Type cntnts(Room As String, ItemType As String, ItemList As List)
        
    Dim Contents As cntnts
        
    Dim ItemNo As Int
    End Sub
    … 
    ItemNo = ItemNo + 
    1
    Contents.Room = 
    "RoomA"
    Contents.ItemType = 
    "normal"
    Contents.ItemList.add(
    "item1")
    Contents.ItemList.add(
    "item2")
    Contents.ItemList.add(
    "item3")
    Contents.ItemList.add(
    "item4")
    kvs.Put(ItemNo, Contents)
    ...
    The value of Contents is almost always empty in the database. Sometimes (randomly), there will be a valid value.
    I've converted to the KeyvalueStore2 class so I could trace the INSERT or REPLACE command and the data is there. I've used TRY/CATCH around the INSERT
    Code:
    Try
            sql1.ExecNonQuery2(
    "INSERT OR REPLACE INTO main VALUES(?, ?)"Array (Key, ser.ConvertObjectToBytes(Value)))     
        
    Catch
            
    Log(LastException)
        
    End Try
    and NO ERROR occurs. The Value is correct and contains all 4 items at the point of the ExecNonQuery2.
    The write to the table seems to go ok, but when I view the database, the Keys are all there (thus a row per key) but the VALUES are mostly empty...

    This works the same way with both the LIBRARY and the CLASS...
    Can the ser.convertobjecttobytes(Value) accept a list?
    Any ideas or suggestions?
    Thanks,
    Rusty
     
  2. Erel

    Erel Administrator Staff Member Licensed User

    Yes.

    Please upload a small project that reproduces this issue.
     
  3. Rusty

    Rusty Well-Known Member Licensed User

    I replied via PM to you.
    Thanks
     
  4. Rusty

    Rusty Well-Known Member Licensed User

    Hi Erel,
    I created a small program that writes the KVS and can't make it fail...
    Obviously, it's my code or a combination of events.
    I will convert it to SQLite (Open/Write/Close...etc.) I had it done with SQLite originally but decided it was more conducive for KVS and tried to convert it to KVS. It worked as SQLite and due (thankfully) to the B4a automatic backups :):):) I can restore to the SQLite version and move on.
    Thanks for your great development environment(s) and support!
    Rusty
     
  5. MitchBu

    MitchBu Active Member Licensed User

    I just bumped into the same issue. One key only recorded the value, otherwise the others simply contain null :(

    Erel advised to put declaration and initialization in Starter, I tried in both main and starter with exactly the same result.

    Here is a log :

    EtMemo_Left,65
    EtMemo_Top,null
    EtSignature_Left,null
    EtSignature_Top,null
    EtWordAmount_Left,null
    EtWordAmount_Top,null
    zut,null


    I will switch to Map in hope not to get the same issue.
     
  6. Erel

    Erel Administrator Staff Member Licensed User

    You should start a new thread and upload a small project that demonstrates the issue.
     
  7. MitchBu

    MitchBu Active Member Licensed User

    There must be something else.

    I tried to create a small test project based on your tutorial, and the issue does not manifest.

    My project works now perfectly and does not exhibit the same issue with Map Collection. So for the moment I have my solution. Case closed for me.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice