【发布时间】:2020-04-16 10:34:44
【问题描述】:
我创建了另一个具有注销功能的类:
fun logOut(context: Context) {
context.stopService(Intent(context, CheckNewMessages::class.java))
val intent = Intent(context, LoginScr::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP and
Intent.FLAG_ACTIVITY_NEW_TASK and
Intent.FLAG_ACTIVITY_NO_ANIMATION
context.startActivity(intent)
(context as Activity).finish()
}
正如你所见,我使用这条线来完成活动:
(context as Activity).finish()
但它仍然存在,因此我的系统中有两个或多个相同的活动。我尝试了很多方法,比如在第一个活动中创建静态变量并在第二个活动中使用这个变量来关闭。但我的活动仍然存在。我还尝试在清单和其他一些方式中使用 lauchmode。也许有人知道我在哪里做错了?
更新
我打电话给logOut()的两个地方。第一个是 RV 适配器和 Fragment 之间的接口:
override fun finish() {
APICallRequests.logOut(context!!)
activity!!.finishAffinity()
}
第二个Interceptor 请求:
private fun updateAccessToken(context: Context) {
val sp = context.getSharedPreferences(Constants.SHARED_PREFS_STORAGE, 0)
synchronized(this) {
val tokensCall = accessTokenApi()
.getNewToken(ReqAccessToken(sp.getString("refresh_token", "")!!))
.execute()
if (tokensCall.isSuccessful) {
} else {
when (tokensCall.code()) {
500 -> {
val thread = object : Thread() {
override fun run() {
Looper.prepare()
Toast.makeText(cont, cont.getString(R.string.server_error_500), Toast.LENGTH_SHORT).show()
Looper.loop()
}
}
thread.start()
}
401 -> {
APICallRequests.logOut(context)
}
}
}
}
}
【问题讨论】:
-
什么调用函数
logOut(),函数调用时传入的context是什么? -
@DavidWasser,通常它可以在用户按下注销 btn 时调用,也可以在用户收到一些错误时从拦截器调用,我将片段作为上下文传递
-
我还是不明白你的问题。无论如何,您不能将
Fragment作为Context参数传递,因为Fragment不会扩展Context。编译器会将其标记为错误,因此您显然没有将Fragment作为context传递。 -
请贴出调用
logOut()的代码。 -
@DavidWasser,我刚刚更新了我的问题,请检查一下 :)
标签: android android-intent android-activity