Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Ophalen informatie uit RecordStore

Pagina: 1
Acties:

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 05:58
Beste mensen,

ik ben op dit moment bezig met het ontwikkelen van een klein progje binnen J2me. Omdat ik de gegevens wil behouden tussen twee sessies ben ik nu de laatste hand aan het leggen aan mijn 'persistance api'. Het wegschrijven van gegevens gaat goed. Alleen het ophalen van het register (hashtable waarin relatie tussen tabel <-> objecttype staat beschreven) gaat op een of andere manier niet goed.

Als ik mijn safe laat runnen met de hashtable krijg ik netjes het aantal records terug als dat er ingevoerd zijn inclusief de key en value die opgeslagen zijn.

Java: PersistanceManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    public void safeRegister() throws IOException, RecordStoreException {
    
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        
        try {
            RecordStore registerStore = RecordStore.openRecordStore("register", true);
            
            if(registerStore.enumerateRecords(null, null,false).numRecords() <= 0 )
            {
                for(Enumeration e = PersistantObjects.keys();e.hasMoreElements();)
                {
                    Class c = (Class)e.nextElement();
                    try {
                        System.out.println("Key :"+c+"Value :"+PersistantObjects.get(c));
                        dos.writeUTF(c.getName());
                        dos.writeUTF((String)PersistantObjects.get(c));
                        byte[] k = baos.toByteArray();
                        registerStore.addRecord(k,0,k.length);
                        baos.flush();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }       
                baos.close();
                dos.close();
            }else{
                System.out.println("er zit iets in!");
            }
            registerStore.closeRecordStore();

        } catch (RecordStoreFullException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } catch (RecordStoreNotFoundException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } catch (RecordStoreException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } catch (IOException io){
            io.printStackTrace();
        }   
    }


Op het moment dat ik mijn register weer terug lees vanuit een recordStore met de volgende code:

Java: PersistanceManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    public void loadRegister() throws IOException, RecordStoreException 
    {
        System.out.println("Loading..");
        RecordStore registerStore = RecordStore.openRecordStore("register", false);
        
        RecordEnumeration re = registerStore.enumerateRecords(null,null,true);
        
        while(re.hasNextElement())
        {
            int recordID = re.nextRecordId();
            System.out.println("ID :" +recordID);
            byte[] mapping = registerStore.getRecord(recordID);
            ByteArrayInputStream bais= new ByteArrayInputStream(mapping);
            DataInputStream dis= new DataInputStream(bais);
        
            try {
                String naam = new String(dis.readUTF());
                String tabel = new String(dis.readUTF());
                Class c = Class.forName(naam);
                System.out.println("Key :"+naam+" Value:" +tabel);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            bais.close();
            dis.close();
        }
        
        System.out.println(PersistantObjects.size());
        registerStore.closeRecordStore();
    }


Krijg ik steevast alleen het aantal van ingevoerde objecten terug echter alleen van 1 type object. bijvoorbeeld als ik 5 objecten in mijn register heb staan, krijg ik netjes 5x een output in loadregister maar met 5x hetzelfde type object.

Ik ben er nu alweer een paar uur mee bezig en misschien heb ik gewoon last van 'tunnel'visie maar ik zie het niet meer. Misschien iemand anders die de adder ziet kruipen door het gras?

Strava | AP | IP | AW


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:44
Print maar eens de inhoud van byte[] k, dan zie je waarschijnlijk wel wat er fout gaat. :)

spoiler:
Je moet in plaats van baos.flush() (die geen functie heeft bij ByteArrayOutputStream) een baos.reset() doen. Je voegt iedere keer dingen toe aan je buffer, en bij de 5e iteratie van je loop heb je 10 strings in de buffer staan.


Ooh ja, mierrenneukerij: het is 'persistent' in plaats van 'persistant' en 'save' in plaats van 'safe'.

[ Voor 22% gewijzigd door Jaap-Jan op 03-02-2008 15:18 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett