2016-11-15 9 views
0

Nur um es klar zu machen, this ist nicht ich will. Ich möchte auf den Kontext einer anderen Aktivität zugreifen.Wie kann ich auf eine andere Aktivität zugreifen?

Angenommen, ich habe zwei Aktivitäten, MainActivity und WebActivity. In MainActivity habe ich oAuth2 Login verwendet, und nach der Anmeldung starte ich die WebActivity. In WebActivity muss ich mit der Funktion mTencent.logout(MainActivity.this); abmelden, die Frage ist, wie kann ich auf MainActivity von WebActivity zugreifen?

Wenn es dies direkt tun, ich den Fehler,

MainActivity ist keine umschließenden Klasse?

In Anbetracht, dass ich ein Starter von Android bin, kann hier nicht der genaue Weg, um es zu implementieren.

Wird jemand helfen? Vielen Dank!

Die API: void com.tencent.tauth.Tencent.logout(Context context)

+0

Warum benötigt die 'Logout'-Funktion speziell den' MainActivity'-Kontext? – SunnySydeUp

+0

ist die api für das oauth2 login, ich nenne es einfach als api doc. Wenn ich die Funktion in MainActivity aufrufen, funktioniert es gut. –

+0

Können Sie bitte einen Code angeben, wie Sie das Login gemacht haben? Ich habe noch nicht viele oAuth2-Authentifizierungen gemacht, aber es scheint komisch zu sein, einen Aktivitätskontext und nicht nur einen normalen Kontext zu spezifizieren. – SunnySydeUp

Antwort

1

Verwenden Sie Application Kontext in Ihrem login und logout Methoden. Da sie auf Anwendungsebene verwaltet werden.

So ändern Sie mTencent.logout(MainActivity.this); zu mTencent.logout(getApplicationContext());.

Ändern Sie auch Ihre login Methode, um im Anwendungskontext zu arbeiten.

+0

das funktioniert gut. –

+0

Bitte akzeptieren Sie auch. –

1

Statt Rahmen einer Aktivität in anderen unter Verwendung was manchmal zu Abstürzen führen.
Sie können Bibliotheken wie EventBus verwenden, um den Code zu verknüpfen.

eine Klasse definieren, das Ereignis u implementiert will zB auszuführen: LogOutEvent.java

public static class LogOutEvent { /* Additional fields if needed */ } 

U Ereignisse wie Abmelde von WebViewActivity veröffentlichen kann.java mit folgendem Befehl

EventBus.getDefault().post(new LogOutEvent()); 

und in MainActivity müssen Sie zuerst Eventbus

@Override 
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
} 

und dann in MainActivity Sie für Veranstaltungen wie diese

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(LogOutEvent event) {/* Do log out here */}; 
1
abonnieren registrieren

Es gibt eine gute praktische Lösung für Ihr Problem, inv olves bestimmte Schritte durchgeführt werden:

1- Definieren Sie eine Schnittstelle:

public interface LogOutInterface { 
    public void logout(); 
} 

2- Haben Sie Ihre MainActivity implementieren diese Schnittstelle: für Ihre WebActivity

public class MainActivity extends ???? implements LogOutInterface { 
    ... 

    @Override 
    public void logout(){ 
    //your logout procedure 
    } 
} 

3- Haben Sie eine öffentliche Methode und erlauben Sie es zu akzeptieren LogOutInterface:

public class WebActivity ... { 
    private LogOutInterface logoutInterface; 
    ... 

    public void setLogOut(LogOutInterface logoutInterface) { 
    this.logoutInterface = logoutInterface; 
    } 
} 

4- Anruf setLogOut von MainActivity:

public class MainActivity ... { 

    public void yourmethod() { 
     ... 
     webActivity.setLogOut(this); 
    } 
} 

5- Anruf Abmeldefunktion von Ihrem WebActivity:

public class WebActivity ... { 
    ... 
    public void yourmethod() { 
     logoutInterface.logout(); 
    } 
} 

Hoffnung, das hilft.

+0

Wenn ich Ihre Frage implementieren, stoße ich auf den Fehler, nicht statische Methode 'setLogOut (com.xxx.defaultapplication.LogOutInterface)' kann nicht aus einem statischen Kontext im vierten Schritt verwiesen werden. Gleich wie das Problem http://stackoverflow.com/questions/4922145/non-static-method-cannot-be-referenced-from-a-static-context-error. Und wenn ich als Antwort implementieren http://stackoverflow.com/a/4922186/6521116 bekomme ich eine java.lang.NullPointerException bei WebActivity.yourmethod() –

+0

@KrisRoofe beachten Sie, dass webActivity die Instanz der Klasse WebActivity nicht die Klasse ist selbst – Pooya

0

Dies ist eine praktikable. Im MainActivity, public static Activity thisActivity; & thisActivity = this; dann im WebActivity mTencent.logout(MainActivity.thisActivity);

oder die Abmeldefunktion als öffentliche statische Funktion von MainActivity setzen nur,

public static void logout() { 
    if (mTencent.isSessionValid()) { 
     mTencent.logout(thisActivity); 
    } 
} 

MainActivity.logout() von WebActivity dann rufen.

Verwandte Themen