我正在构建一个临时演示应用程序,我需要一种每分钟轮询一次服务器的服务。 (我知道对此有更好的机制)。现在,我有一个称为APIHandler的类,我的MainActivity和服务都应使用。在为我的APIHandler类的实例提供服务时遇到了问题。因此,我基本上想要的是我的服务能够使用我的APIHandler实例。无法将APIHandler类设为静态,因为它需要一个需要上下文实例的Volley.newRequestQueue对象。
这就是我从MainActivity启动服务的方式
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setup()
apiHandler = APIHandler(this) //I neeed this instance...
PollingService.enqueueWork(this, Intent(this, PollingService::class.java))
}
这是我的服务
class PollingService(private val apiHandler: APIHandler) : JobIntentService() {
private val timer = Timer()
private val tag = "PollingService"
//To be present here!
companion object {
fun enqueueWork(context: Context, work: Intent) {
enqueueWork(context, PollingService::class.java, 1, work)
}
}
override fun onHandleWork(intent: Intent) {
Log.d(tag, "Starting")
timer.scheduleAtFixedRate(timerTask {
run {
Log.d(tag, "Polling...")
apiHandler.getLEDState(1)
apiHandler.getLEDState(2)
}
}, 0, 5000)
}
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onDestroy() {
this.timer.cancel()
super.onDestroy()
}
}
答案 0 :(得分:0)
如果仅需要上下文,则可以在onHandleWork
函数中获取它,请参见下文(对不起,我使用Java而不是Kotlin):
@Override
protected void onHandleWork(@NonNull Intent intent) {
Context context = getApplicationContext();
// Instantiate your APIHandler with the context here
}
尝试将其复制粘贴到您的项目中,以使AS自动为您将其转换为Kotlin。