2013-05-06 9 views
8

Sto utilizzando l'SDK Android di Facebook e desidero chiudere la mia attività dopo che un utente effettua l'accesso e ottiene l'oggetto utente. In pratica sto conservando parti di esso, ma voglio chiudere l'attività a prescindere.call finish() dal metodo statico

 // make request to the /me API 
     Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

     // callback after Graph API response with user object 
     @Override 
     public void onCompleted(GraphUser user, Response response) { 
      if (user != null) { 
      finish(); // causes errors 
      } 
     } 
     }); 

Il messaggio di errore IDE finish() è: "Cannot make a static reference to the non-static method finish() from the type Activity"

come procedere?

+1

Prova 'getActivity(). Finish();' se hai un contesto, quindi 'context.getActivity.finish()' – Pragnani

+1

hai provato questo http://stackoverflow.com/a/12025698/1218762? –

+0

@Rstar ha funzionato come un fascino – CQM

risposta

24

creare un riferimento alla tua attività in onCreate con

//onCreate 
final Activity activity = this; 

Quindi è possibile utilizzare che nel vostro callback onCompleted

activity.finish(); 

Potrebbe essere necessario fare Activity activity globale.

EDIT 2014/02/26:

Nota che chiamare finish() da un metodo statico è probabilmente una cattiva pratica. Si sta dicendo un'istanza specifica di un Activity con il proprio ciclo di vita che dovrebbe chiudersi da un metodo statico, qualcosa senza ciclo di vita o stato. Idealmente chiamereste finish() da qualcosa con un legame allo Activity.

+0

qualcosa del genere ha funzionato! attività attività statica; non ci sono più errori, vedremo cosa succede compilerò :) – CQM

+0

Sono contento, se funziona, contrassegna la domanda come corretta in modo che non rimanga più "senza risposta". – bclymer

+0

sì, ha funzionato come previsto, l'ho finalmente compilato, grazie! – CQM

3

Per alcuni, il metodo di bclymer potrebbe non funzionare. Non ha fatto sulla mia, utilizzando l'ultima versione beta di Android Studio ... Prova questo ...

public class myActivity extends Activity { 

    public static Activity activity = null; 
    ... 
    ... 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.myActivity_layout); 

     activity = this; 
     .... 
     .... 
    } 
} 

dal vostro altre attività all'interno dello stesso pacchetto, è sufficiente ....

// use try catch to avoid errors/warning that may affect the 
    // next method execution 
    try { 
     myActivity.activity.finish(); 
    } catch (Exception ignored) {}