2013-05-06 16 views
8

Używam pakietu Facebook Android SDK i chcę zamknąć moją aktywność po zalogowaniu się użytkownika i pobraniu obiektu użytkownika. W praktyce przechowuję części tego, ale chcę zamknąć działanie niezależnie.Wywołanie połączenia() z metody statycznej

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

komunikat o błędzie IDE na finish() jest: "Cannot make a static reference to the non-static method finish() from the type Activity"

jak postępować?

+1

Spróbuj 'getActivity(). Finish();' jeśli masz kontekst, to 'context.getActivity.finish()' – Pragnani

+1

próbowałeś tego http://stackoverflow.com/a/12025698/1218762? –

+0

@Rstar działał jak czar – CQM

Odpowiedz

24

utworzyć odwołanie do swojej aktywności w onCreate z

//onCreate 
final Activity activity = this; 

Następnie można użyć, że w onCompleted zwrotnego

activity.finish(); 

Być może trzeba zrobić Activity activity globalny.

EDIT 26.02.2014:

Zauważ, że wywołanie finish() z metody statycznej jest prawdopodobnie złą praktyką. Mówisz konkretnej instancji Activity z własnym cyklem życia, że ​​powinna ona zamknąć się z metody statycznej, czegoś bez żadnego cyklu życia lub stanu. Najlepiej byłoby nazwać finish() z czegoś z powiązaniem z Activity.

+0

coś takiego zadziałało! 'static Activity activity;' nie więcej błędów, zobaczymy co się stanie, ja skompiluję :) – CQM

+0

Cieszę się, jeśli to działa, proszę oznaczyć pytanie jako poprawne, aby nie było to już "bez odpowiedzi". – bclymer

+0

tak, działało zgodnie z przeznaczeniem, w końcu to skompilowałem, dziękuję! – CQM

3

Dla niektórych metoda bclymer może nie działać. To nie na moje, przy użyciu najnowszej wersji beta Android studio ... Spróbuj tego ...

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

z innej działalności w ramach tego samego pakietu, po prostu ....

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