Я использую библиотеку Kevin Sawicki для HTTP-запросов в приложении для Android. Фактический вызов библиотечных методов для создания запроса выполняется в файле класса (он не вызывается из активности), который называется TemplateHelper
. Метод, который вызывает библиотеку HttpRequest в моем классе TemplateHelper выглядит следующим образомАндроид HTTP-запрос на ошибку основного потока
public static JSONObject GetTemplates() {
try {
return new JSONObject(HttpRequest.get("http://myapi.mycompany.com/templates").body());
} catch (HttpRequestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
С моей деятельности я тогда называю TemplateHelper.GetTemplates()
, чтобы получить данные. Однако, когда я делаю это, Android выдает исключение android.os.NetworkOnMainThreadException
. Быстрый поиск Google показывает мне код для запуска HTTPRequest в отдельном потоке. Но если я запустил код в отдельном потоке, как я могу вернуть результат в основной поток?
Не использовать. Используйте асинхронный поток. –
Если вы будете использовать 'AsyncTask', метод' onPostExecute() 'будет запущен в основном потоке после завершения задачи. – SpongeBobFan
[Этот ответ] (http://stackoverflow.com/questions/18517400/inner-class-can-access-but-not-update-values-asynctask/18517648#18517648) покажет вам, как реализовать «интерфейс» с 'AsyncTask', поэтому вы можете получить' callBack' в 'MainActivity', когда ваша задача будет завершена. – codeMagic