Autore Topic: Facebook e multithreading  (Letto 429 volte)

Offline sika

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg P500 (Optimus One)
  • Sistema operativo:
    OSX 10.6
Facebook e multithreading
« il: 31 Ottobre 2011, 10:05:02 CET »
0
Salve a tutti. Sto sviluppando un'app che si integra con FB. Questa app deve eseguire una query fql, dopo aver ottenuto il solito access_token.

Il problema però è il seguente: l'AT lo prende tramite la funzione authorize da invocare su un oggetto di tipo Facebook, che invoca l'autenticazione e, al completamento di questa, è possibile ottenere l'access token come stringa, e inserirlo all'interno delle Sharedpreferences. L'invocazione del metodo, però, non è bloccante, in quanto parallelamente viene eseguito il codice al di sotto del metodo authorize, eseguendo quindi la query fql, che richiede l'access token letto dalle Sharedpreferences.
ciò comporta 2 casi:

  • l'autenticazione è già avvenuta precedentemente: la query fql viene eseguita con l'access_token prelevato dalle Sharedpreferences e tutto viene eseguito in maniera corretta;
  • l'autenticazione non è mai avvenuta precedentemente (quando viene lanciata per la prima volta l'app), viene richiesta l'autenticazione, ma nel frattempo viene eseguita la query con access_token nullo, il che comporta l'eccezione nell'esecuzione della procedura.

Come si potrebbe risolvere questo problema?

Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Facebook e multithreading
« Risposta #1 il: 31 Ottobre 2011, 10:14:56 CET »
0
Come si potrebbe risolvere questo problema?

Se l'access token è nullo, rimandi l'accesso a quando non sarà più nullo. In aggiunta potresti anche controllare che una richiesta sia in corso, e se non lo è fai in modo di avviarla.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline sika

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg P500 (Optimus One)
  • Sistema operativo:
    OSX 10.6
Re:Facebook e multithreading
« Risposta #2 il: 31 Ottobre 2011, 17:05:32 CET »
0
ho provato ad inserire una guardia sulla valorizzazione dell'access_token, inserendo un while wait() quando l'AT e null e un notify() dopo la valorizzazione dell'AT all'interno della funzione di autorizzazione di Facebook; il tutto rendendo synchronized il metodo all'interno del quale viene eseguito questo malloppone di codice: il risultato è che l'app resta in attesa dell'access_token, ma la notify viene eseguita e mi si incarta, dandomi errore del tipo

Codice: [Seleziona]
object not locked by thread before notify()
« Ultima modifica: 31 Ottobre 2011, 17:08:20 CET da sika »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Facebook e multithreading
« Risposta #3 il: 31 Ottobre 2011, 17:21:43 CET »
0
Codice (Java): [Seleziona]
synchronized(oggetto){
       oggetto.notify();
}

Offline sika

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg P500 (Optimus One)
  • Sistema operativo:
    OSX 10.6
Re:Facebook e multithreading
« Risposta #4 il: 06 Novembre 2011, 09:03:49 CET »
0
Avevo fatto una fesseria nella notify :D

grazie 1000 comunque :-P