Dela HttpClient/Cookies mellan flera activities?

Diskussion i 'Frågor, support och diskussion' startad av Dalla, 23 jun 2010.

  1. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Tjena!

    Håller som bäst på med min första app.

    Lite lätt bakgrundsinfo:
    Tänkte göra en app för att lämna in stryktipsrader.
    I appens första activity hämtas data från svenska spel,
    och användaren sätter sin rad. När användaren är klar skall data laddas upp till en server, detta kräver inloggning hos svenska spel. Vid inloggning får jag tillbaka ett gäng cookies, dessa behöver jag sedan ha med mig i de ett gäng anrop som görs i ytterliggare två nya activities där användaren bekräfta de rader som har laddats upp, och sedan en bekräftelse tillbaka från svenska spel på att allt gick bra.

    Undrar lite vad som är bästa sättet att dela en HttpClient / Cookies mellan flera activities, är det att använda bundles, eller finns det andra sätt?

    /Dalla
     
  2. Reconnnn

    Reconnnn Professional Droid Hedersmedlem

    Blev medlem:
    9 mar 2010
    Inlägg:
    2 809
    Mottagna gillanden:
    263

    MINA ENHETER

    Vet inte om jag förstod rätt men hade det inte funkat med att göra HttpClienten som public static.
     
  3. Fredrik

    Fredrik Kid Droid Medlem

    Blev medlem:
    24 jun 2009
    Inlägg:
    36
    Mottagna gillanden:
    2

    MINA ENHETER

  4. ZiP

    ZiP Youth Droid Medlem

    Blev medlem:
    12 feb 2010
    Inlägg:
    126
    Mottagna gillanden:
    0

    MINA ENHETER

    Gör en singleton-klass som wrappar en HttpClient och låter dig göra requests
     
  5. ThePatrik

    ThePatrik Youth Droid Medlem

    Blev medlem:
    3 jun 2010
    Inlägg:
    248
    Mottagna gillanden:
    28

    MINA ENHETER

    För att dela HTTPclient skulle jag göra en klass i en singelton.

    public class SharedHHTP{

    // Constructor
    private SharedHHTP () {}

    private static class SharedHTTPHolder {
    private static final SharedHHTP INSTANCE = new SharedHTTP();
    }

    public static SharedHHTP getInstance() {
    return SharedHTTPHolder.INSTANCE;
    }

    hhtpClient, delade data och
    cookie objekt och saker här...

    }


    Sen kan du från dina olika Acitvity onCreate() anrop göra detta:

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SharedHTTP myHTTPClient = SharedHTTP.getInstance();

    myHTTPClient.whatever();
    }

    Det funkar mycket bättre att dela komplexa data och objekt via singletons
    än att hålla på passa saker i Intenten med Bundles.

    Patrik

    2a på bollen...igen :D
     
    Last edited: 24 jun 2010
  6. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Tack för alla förslag! Hittade ett förslag på en singleton igår som jag använder just nu, tror dock inte att jag egentligen har behov av en syncronized metod?

    Såhär ser koden ut iaf i min klass HttpClientFactory:

    private static DefaultHttpClient client;

    public synchronized static DefaultHttpClient getThreadSafeClient() {

    if (client != null)
    return client;

    client = new DefaultHttpClient();

    ClientConnectionManager mgr = client.getConnectionManager();

    HttpParams params = client.getParams();
    client = new DefaultHttpClient(
    new ThreadSafeClientConnManager(params,
    mgr.getSchemeRegistry()), params);

    return client;
    }
     
  7. ZiP

    ZiP Youth Droid Medlem

    Blev medlem:
    12 feb 2010
    Inlägg:
    126
    Mottagna gillanden:
    0

    MINA ENHETER

    Inte så noga med synchronized men ThreadSafe är nice, slipper du problem om en request dröjer medan du byter activity eller om du kör flera requests samtidigt.
     
  8. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

  9. Dalla

    Dalla Youth Droid Medlem

    Blev medlem:
    1 maj 2010
    Inlägg:
    145
    Mottagna gillanden:
    3

    MINA ENHETER

    Tack, får ta en titt på den också!
     
  10. ozp

    ozp Teen Droid Medlem

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

    MINA ENHETER

    I Android är det inte bra att ha singelton-klasser eftersom de är statiska och då kan inte android döda den om den behöver minnet. Ett bättre sätt är skapa en Application-klass som håller referensen till HttpClient. Alla activitys kan sedan göra getApplication() för att komma åt den.
     
  11. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Om det blir ont om minne, så avslutas hela VM:en, så en klass med statiska attribut är inte farlig på något sätt, däremot kan den ev ge en falsk tryghet just iom att din VM kan termineras, och en ny kan sedan startas. Då finns inte ditt data kvar.
     
  12. PatrikS

    PatrikS Senior Droid Medlem

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

    MINA ENHETER