为了说清楚,this不是我想要的。我想访问另一个Activity的上下文。
假设我有两项活动MainActivity
和WebActivity
。在MainActivity
我使用了oAuth2
登录,登录后我启动了WebActivity
。在WebActivity
我需要使用mTencent.logout(MainActivity.this);
函数注销,问题是如何从MainActivity
访问WebActivity
?
如果我直接这样做,我会收到错误
MainActivity不是封闭类吗?
考虑到我是Android的首发,这可能不是实现它的确切方法。
有人会帮忙吗?谢谢!
API:void com.tencent.tauth.Tencent.logout(Context context)
答案 0 :(得分:1)
而不是在其他活动中使用一个活动的上下文,有时可能导致崩溃 你可以使用像EventBus这样的库来链接代码。
定义一个实现您想要执行的事件的类,例如:LogOutEvent.java
public static class LogOutEvent { /* Additional fields if needed */ }
您可以使用以下命令从 WebViewActivity.java 发布退出事件
EventBus.getDefault().post(new LogOutEvent());
并在 MainActivity 中首先需要注册事件总线
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
然后在 MainActivity 中,您可以订阅此类活动
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(LogOutEvent event) {/* Do log out here */};
答案 1 :(得分:1)
您的问题有一个很好的实践解决方案,涉及某些步骤:
1-定义界面:
public interface LogOutInterface {
public void logout();
}
2-让MainActivity
实现此界面:
public class MainActivity extends ???? implements LogOutInterface {
...
@Override
public void logout(){
//your logout procedure
}
}
3-为WebActivity
设置公开方法并允许其接受LogOutInterface
:
public class WebActivity ... {
private LogOutInterface logoutInterface;
...
public void setLogOut(LogOutInterface logoutInterface) {
this.logoutInterface = logoutInterface;
}
}
从setLogOut
致电MainActivity
:
public class MainActivity ... {
public void yourmethod() {
...
webActivity.setLogOut(this);
}
}
5-来自WebActivity
的注销功能:
public class WebActivity ... {
...
public void yourmethod() {
logoutInterface.logout();
}
}
希望这会有所帮助。
答案 2 :(得分:1)
在Application
和login
方法中使用logout
上下文。因为它们将在应用程序级别进行管理。
所以将mTencent.logout(MainActivity.this);
更改为mTencent.logout(getApplicationContext());
。
还要将login
方法更改为在应用程序上下文中工作。
答案 3 :(得分:0)
这是可行的。
在MainActivity中,public static Activity thisActivity;
& thisActivity = this;
然后在WebActivity mTencent.logout(MainActivity.thisActivity);
或者只是将logout函数作为MainActivity的公共静态函数,
public static void logout() {
if (mTencent.isSessionValid()) {
mTencent.logout(thisActivity);
}
}
然后从WebActivity调用MainActivity.logout()
。