Spara int multidimensional array

Diskussion i 'Frågor, support och diskussion' startad av Nudeln, 16 jun 2011.

  1. Nudeln

    Nudeln Youth Droid Medlem

    Blev medlem:
    15 jun 2011
    Inlägg:
    234
    Mottagna gillanden:
    102
    Telefon:
    Pixel 6

    MINA ENHETER

    Telefon:
    Pixel 6
    Hej

    Håller på att utveckla min första app, och måste säga att det är riktigt kul och går bra! Men nu har jag ställts inför ett problem som jag inte lyckas lösa.

    Jag har en multidimensional array, Integer newalldata[][], som är shufflad och innehåller information för min activitet. Jag vill spara newalldata om activiteten avslutas, telefonen roteras osv... Vid rotation fungerar följande kod för att spara den initierade arrayen, men vid nystart av activiteten initieras den på nytt och shufflas och är således inte densamma som den var innan omstarten...

    Förstår ni mitt problem?

    PHP:
            Object data getLastNonConfigurationInstance();
            if (
    data!=null) {
                
    newalldata = (Integer[][]) data;
            }

        
        @
    Override
        
    public Object onRetainNonConfigurationInstance() {
            return(
    newalldata);
        }
    Tack på förhand, Nudeln
     
    Last edited: 16 jun 2011
  2. ozp

    ozp Teen Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    250
    Mottagna gillanden:
    31

    MINA ENHETER

    När appen roteras eller hamnar i bakgrunden och stängs av systemet ska du spara ner actitivetens state genom att överlagra onSaveInstanceState(Bundle outState)

    outState kommer du sedan att få in i din onCreate(Bundle savedInstanceState) och kan då läsa ut värdena du har sparat och återställa aktiviteten som den var innan den avslutades.

    Trycker man däremot på bakåtknappen för att lämna din aktivitet kommer inte onSaveInstanceState att kallas och du kommer inte att få in någon savedInstanceState i din onCreate. Vill du spara data så länge din app körs kan du göra det i t.ex. genom att skapa en klass som ärver Application och som du definierar i application-taggen i ditt manifiest. Det objektet kommer att finnas kvar så länge din process finns kvar i minnet.

    Om du vill spara datat även om din process blir avstängd måste du använda ett persistent storage. T.ex. SharedPreferences, en databas eller en fil.
     
  3. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    831
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Det du gjort fungerar för rotation av telefonen och några andra konfigurationsändringar, men inte för omstart av applikationen. Se http://developer.android.com/guide/topics/resources/runtime-changes.html
    Den tekniken passar bättre för vissa situationer. Typiskt stora datamängder.
    Sätt en breakpoint i metoden onRetainNonConfigurationInstance() för att se vid vilka fall den anropas.

    I övriga fall så bör du titta på SharedPreferences eller annat storage.

    Kolla lite på vad är det för data som sparas. Är det inställningar, state eller applikationsdata. Är det stora datamängder? Ska användaren komma tillbaks till exakt samma läge när appen startas på nytt eller ska den initieras om. Beroende på vad det är för data och hur det ska användas så är det lämpligt att använda olika lösningar.
    Beskriv gärna din data så kanske vi kan ge tips på en bra design.
     
  4. Nudeln

    Nudeln Youth Droid Medlem

    Blev medlem:
    15 jun 2011
    Inlägg:
    234
    Mottagna gillanden:
    102
    Telefon:
    Pixel 6

    MINA ENHETER

    Telefon:
    Pixel 6
    Ok. Jag vill spara undan integern newalldata[236][2] och de värden som finns på respektive position. Vill även spara undan ett par enkla int:ar som heter i, counter, position osv... Dessa i kombination med newalldata avgör var användaren befinner sig i appen, och jag skulle vilja att han återkommer till det läget när appen startas om, roteras, osv...

    Mvh Nudeln
     
    Last edited: 16 jun 2011
  5. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 350
    Mottagna gillanden:
    831
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Här står det mesta om hur man sparar state och data vid olika händelser:
    http://developer.android.com/reference/android/app/Activity.html

    Det är svårt att säga exakt hur du ska göra när man inte vet något om applikationen och vad det är för data.
    För inställningar och små datamängder använder jag SharedPreferences.
    Mellan körningar av applikationen skulle jag använda en databas eller fil.
    För konfigurationsändringar så funkar onSaveInstanceState().
     
    Nudeln gillar detta.