2013-05-06 4 views
8

Ich verwende das Facebook Android SDK und möchte meine Aktivität schließen, nachdem sich ein Benutzer anmeldet und das Benutzerobjekt abruft. In der Praxis speichere ich Teile davon, aber ich möchte die Aktivität trotzdem schließen.Call Finish() von der statischen Methode

 // 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 
      } 
     } 
     }); 

Die IDE-Fehlermeldung auf finish() ist: "Cannot make a static reference to the non-static method finish() from the type Activity"

wie es weitergehen?

+1

Versuchen Sie 'getActivity(). Finish();' Wenn Sie einen Kontext haben, dann haben Sie 'context.getActivity.finish()' – Pragnani

+1

versucht, dies http://stackoverflow.com/a/12025698/1218762? –

+0

@Rstar arbeitete wie ein Charme – CQM

Antwort

24

einen Verweis auf Ihre Aktivität in onCreate erstellen mit

//onCreate 
final Activity activity = this; 

Dann können Sie, dass in Ihrem OnCompleted Rückruf

activity.finish(); 

Sie haben verwenden, könnte Activity activity global zu machen.

EDIT 2014.02.26:

Beachten Sie, dass finish() aus einer statischen Methode aufrufen Praxis wahrscheinlich schlecht ist. Sie sagen einer bestimmten Instanz eines Activity mit seinem eigenen Lebenszyklus, dass es sich von einer statischen Methode, etwas ohne irgendeinen Lebenszyklus oder Zustand, absperren sollte. Im Idealfall würden Sie finish() von etwas mit einer Bindung an die Activity anrufen.

+0

so etwas wie gearbeitet! 'statische Aktivität Aktivität' 'keine Fehler mehr, wir werden sehen, was passiert, ich kompiliere :) – CQM

+0

Ich bin froh, wenn es funktioniert bitte markieren Sie die Frage als richtig, so dass dies nicht mehr als" unbeantwortet "bleibt. – bclymer

+0

ja, es funktionierte wie beabsichtigt, ich habe es endlich kompiliert, danke! – CQM

3

Für einige funktioniert bclymers Methode möglicherweise nicht. Es hat nicht auf meinem, die neueste Beta-Version Android Studio mit ... Versuchen Sie, diese ...

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; 
     .... 
     .... 
    } 
} 

von Ihrer anderen Aktivität im gleichen Paket, einfach ....

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