Звук дал ответ. Это должно работать. Я просто объясню причину немного.
Из вашего кода кажется, что вы делаете HTTP-запрос в фоновом потоке. Вот почему вам нужно сделать RunOnUiThread. Это очень хороший подход.
Однако RunOnUiThread не гарантирует, что код будет немедленно выполнен в потоке пользовательского интерфейса. Он просто отправляет сообщение в цикл выполнения потока пользовательского интерфейса. И когда поток пользовательского интерфейса получает шанс, он его выполняет.
По сути, это означает, что "wresponse.close ()", вероятно, будет выполняться перед "resp = sr.ReadToEnd (). ToString ()". Поскольку ответ закрыт, любая попытка чтения из него приведет к ошибке. Но ошибка происходит в потоке пользовательского интерфейса, так как попытка чтения будет в потоке пользовательского интерфейса. Вот почему ваш блок try / catch не работает.
В коде Sound эта проблема устранена. Напомним, что этот код также намного эффективнее, поскольку фактическое чтение байтов выгружается в рабочий поток, поэтому ваш поток пользовательского интерфейса будет гораздо более отзывчивым.