Я хочу использовать твиттер API для потоковой передачи в android.
Я использовал kotlin сопрограмм и модификацию.
Каким-то образом в третьем запросе я получаю HTTP 420 ОШИБКА (улучшите ваше спокойствие)
Я не могу понять, почему это происходит. Я использую kotlin сопрограмм.
Вот мой код:
fun getStreamData(str: String) {
Log.d("debug", "Fetching data..")
coroutineScope.launch {
withContext(Dispatchers.Main) {
//Display loading animation in UI
_status.value = DataApiStatus.LOADING
}
try {
val listResult = ApiService().api!!.getTweetList(str).await()
while (!listResult.source().exhausted()) {
val reader = JsonReader(InputStreamReader(listResult.byteStream()))
// https://stackoverflow.com/questions/11484353/gson-throws-malformedjsonexception
reader.setLenient(true);
val gson = GsonBuilder().create()
val j = gson.fromJson<JsonObject>(reader, JsonObject::class.java)
Log.d("debug", "JSON: " + j.toString())
if (j.get("text") != null && j.getAsJsonObject("user").get("profile_image_url_https") != null && j.getAsJsonObject("user").get("name") != null){
val t = gson.fromJson<Tweet>(j, Tweet::class.java)
withContext(Dispatchers.Main) {
_status.value = DataApiStatus.DONE
// https://stackoverflow.com/questions/47941537/notify-observer-when-item-is-added-to-list-of-livedata
tweetsList.add(t)
_tweetsList.value = tweetsList
}
}
}
}
catch (e : JsonSyntaxException) {
Log.e("error", "JsonSyntaxException ${e.message}");
}
catch (e: Exception) {
Log.e("error", "ERROR ${e.message}")
}
}
}
Эта функция отвечает за поиск потока в соответствии со строкой str , которая является параметром. Кроме того, когда изменяется параметр поиска, я отменяю текущее задание и повторно запускаю новое с фактическим параметром поиска.
fun cancelJob(){
Log.d("debug", "Cancelling current Job!")
coroutineScope.coroutineContext.cancelChildren()
}
Что я делаю не так? В третьем запросе я получаю HTTP 420 ОШИБКА.
Вот полный код:
https://github.com/maiamiguel/RHO-Challenge