Решено: У меня была проблема с одновременным изменением, которая, по моему мнению, была вызвана вызовом моего фильтра до того, как задача была выполнена, и в итоге мне удалось добавить вызов к внешнему методу в onPostExecute, который скопировал значения в copyonwritearraylist.
Итак, у меня есть AsyncTask, который анализирует json с веб-сайта и инициализирует список, когда это будет сделано.
inner class GetSchoolAsync : AsyncTask<String, String, String>() {
lateinit var list: MutableList<Info>
override fun onPreExecute() {
// Before doInBackground
}
override fun doInBackground(vararg urls: String?): String {
var urlConnection: HttpURLConnection? = null
try {
val url = URL(urls[0])
urlConnection = url.openConnection() as HttpURLConnection
urlConnection.connectTimeout = CONNECTON_TIMEOUT_MILLISECONDS
urlConnection.readTimeout = CONNECTON_TIMEOUT_MILLISECONDS
val inString = urlConnection.inputStream.bufferedReader().readText()
publishProgress(inString)
} catch (ex: Exception) {
println("HttpURLConnection exception" + ex)
} finally {
if (urlConnection != null) {
urlConnection.disconnect()
}
}
return " "
}
override fun onProgressUpdate(vararg values: String?) {
try {
var list = mutableListOf<Info>()
var data = Gson().fromJson(values[0], Read::class.java)
for(item in data.schools){
list.add(item)
// println(item)
}
this.list = list
} catch (ex: Exception) {
println("JSON parsing exception" + ex.printStackTrace())
}
}
override fun onPostExecute(result: String?) {
// Done
schoolList = this.list
}
}
Он выполняется в mainCtivity OnCreate вместе с другой асинхронной функцией, которая отображает карту. Список школ является частным латинитским вар в основной деятельности.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
GetSchoolAsync().execute("https://code.org/schools.json")
mapFragment.getMapAsync(this)
}
Мне нужно знать, когда заканчивается часть json и инициализируется список, чтобы я мог добавить маркеры на карту. Каждый раз, когда я пытался проверить состояние асинхронной задачи в отладчике, она всегда показывает, что она находится в состоянии ожидания или запущена. Когда я могу быть уверен, что он закончен?