2013-10-11 4 views
1

Я использую библиотеку 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 в отдельном потоке. Но если я запустил код в отдельном потоке, как я могу вернуть результат в основной поток?

+1

Не использовать. Используйте асинхронный поток. –

+2

Если вы будете использовать 'AsyncTask', метод' onPostExecute() 'будет запущен в основном потоке после завершения задачи. – SpongeBobFan

+0

[Этот ответ] (http://stackoverflow.com/questions/18517400/inner-class-can-access-but-not-update-values-asynctask/18517648#18517648) покажет вам, как реализовать «интерфейс» с 'AsyncTask', поэтому вы можете получить' callBack' в 'MainActivity', когда ваша задача будет завершена. – codeMagic

ответ

3

Вы не можете делать сетевые запросы в основном потоке. Вы получите ошибку, которую видите сейчас. Вам нужно использовать либо AsyncTask, либо вам нужно создать новый поток. Лично я бы использовал AsyncTask. Когда вы используете AsyncTask, вы можете использовать метод onPostExecute, чтобы вернуть значение в основной поток.

0

Создать Async Задача в YOUT классе TemplateHelper, Асинхронный задача выполняется в другом потоке, поэтому основной поток исключение не будет там

Проверить это tutorial, это именно то, что вам нужно сделать.

Смежные вопросы