我正在尝试运行访问本地存储的服务,查找尚未上传到服务器的项目,并上传它们。在尝试分配我的文件名时,我一直在我的活动中使用filesDir。我相信filesDir需要一个上下文,我正在制作的服务没有。有替代方案吗?这是我的代码:
class AuthorizationSaveTask : AsyncTask<Int, Int, String>() {
override fun onPreExecute() {
}
override fun doInBackground(vararg params: Int?): String {
val startId = params[0]
//Get data for list view
var authorizationArrayList = ArrayList<AuthorizationObject>()
try {
//Set target file to authorizations.txt
val targetFile = File(filesDir, "authorizations.txt")
//Create new file input stream
val fis = FileInputStream(targetFile)
//Create new object input stream, using fis
val ois = ObjectInputStream(fis)
//write object input stream to object
//TODO: There has to be a better syntax than this.
authorizationArrayList = (ois.readObject() as ArrayList<*>).filterIsInstance<AuthorizationObject>() as ArrayList<AuthorizationObject>
//close object output stream
ois.close()
//close file output stream
fis.close()
} catch (e: ClassNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
return "Service complete $startId"
}
override fun onProgressUpdate(vararg values: Int?) {
super.onProgressUpdate(*values)
val counter = values[0]
Log.i("BEAU", "Service Running $counter")
}
override fun onPostExecute(result: String) {
Log.i("BEAU", result)
}
感谢您的时间!如果我能提供任何其他信息,请告诉我。
一个Service
是一个Context
。更确切地说是它的子类。所以你可以像在getFilesDir()
中一样调用Activity
。
但是,您发布的代码不显示Service
而是AsyncTask
...我不知道您在哪里创建AsyncTask
但您仍然可以将Context作为参数传递。
编辑由于看起来OP正在寻找通过Context
到AsynkTask
的方法,我编辑了我的答案。
将您的代码更改为:
class AuthorizationSaveTask : AsyncTask<Int, Int, String>(val context: Context)
无论你在哪里创建任务,都要传递上下文。
val task = AuthorizationSaveTask(this)
您可能还想考虑仅传递文件。
class AuthorizationSaveTask : AsyncTask<Int, Int, String>(val saveDir: File)
在你的Activity
:
val task = AuthorizationSaveTask(filesDir)