ladda db vid installation

Diskussion i 'Frågor, support och diskussion' startad av Lurv, 18 mar 2010.

  1. Lurv

    Lurv Kid Droid Medlem

    Blev medlem:
    15 mar 2010
    Inlägg:
    36
    Mottagna gillanden:
    1

    MINA ENHETER

    Problemet är tvådelat; Har en ganska stor XML som jag skulle vilja få in i databasen när appen installeras så den ligger där redan poppulerad.

    1. hur kan jag få in xmldatan i databasen?

    2. hur ser jag till att detta görs när man installerar appen?
     
  2. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Det gör du inte, du letar efter en flagga "installed" eller dylikt som du sedan sätter själv i dina preferences.
    Är den 0 eller false så
    "Installerar" du programmet första gången det körs, sen sätter du "installed"-flaggan.

    Så hade i alla fall jag gjort.

    Hur stor är ganska stor?
     
  3. Lurv

    Lurv Kid Droid Medlem

    Blev medlem:
    15 mar 2010
    Inlägg:
    36
    Mottagna gillanden:
    1

    MINA ENHETER

    50 000 poster, med id och namn i varje post.
     
  4. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Låter som en ganska så "grund" xml-struktur iaf, så det behöver inte vara för avancerat att skriva den kod som behövs för att peta ner i databas.
    Alternativet är att du har xml-filen på sdkortet och hämtar lämnar efter behov.
     
  5. JDS

    JDS Adult Droid Medlem

    Blev medlem:
    17 jun 2009
    Inlägg:
    637
    Mottagna gillanden:
    32

    MINA ENHETER

    Det är ju lite surt att packa in denna data i APK filen. Jag vet inte hur stort övriga delen av programmet är men ett litet Android program är ju inte mer än kanske 100kB men med denna data inbakat blir programmet säkert 10ggr så stort. Personligen hade jag hämtat XML filen från en server första gången. Jag vet inte hur stor varje post var men räknar man högt med 100byte/post så är det inte mer än 5MB som man får hämta en gång. Är det en app som bara är till för dig så är det ju klart enklast att lägga den på SD kortet.

    Att få in själva XML filen i databasen är ju däremot väldigt enkelt. Du kan få själva XML filen som en InputStream där du sedan kan läsa in element för element i en loop i databasen.

    För att bara göra det vid uppstart kan du göra som PatrikS sa eller ännu enklare bara hämta antal rader i databasen som är 0 ifall du inte lagt in något ännu. Gör du på det viset så kan man tvinga programmet att läsa in originaldata igen genom att rensa databasen.
     
  6. Lurv

    Lurv Kid Droid Medlem

    Blev medlem:
    15 mar 2010
    Inlägg:
    36
    Mottagna gillanden:
    1

    MINA ENHETER

    Tackar JDS och Patrik. Har lyckats få till det att den parsar in xml'en första gången och sedan sätter en flagga.

    har fastnat lite på hur man får ut data ur tabellen. säg att jag har ett kundobjekt med namn och adress (båda simpla strings). Tabellen består av tre kolumner, row_id (autogenererad) namn och adress. Jag skulle vilja implementera något i stil med "s = "SELECT * FROM Customers WHERE Name LIKE '" + partial_name + "'" som retunerar en array av kundobjekt som har namn som innehåller partial_name (helst case-oberoeende)...
     
  7. JDS

    JDS Adult Droid Medlem

    Blev medlem:
    17 jun 2009
    Inlägg:
    637
    Mottagna gillanden:
    32

    MINA ENHETER

    Förstår inte riktigt problemet? Ifall du har lyckats skriva kod för att skriva till databasen så är det ju inte svårare att skriva kod för att läsa ur databasen eller får du något fel när du försöker använda din query eller inget resultat?
     
  8. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    SQLiteDatabase har metoden query som returnerar en cursor enligt de villkor du sätter med hjälp av parametrarna selection och selectionArgs.

    Om du nu bestämt vill ha en array av objekt är det bara att itterera igenom cursorn och skapa upp objekten.

    Om du inte ska slösa för mycket med det dyrbara minnet bör du i stället överväga en design där du returnerar cursorn och använder den där du tänkt använda arrayen.