主线程上的Android http请求错误

我在我的Android应用程序中使用Kevin Sawicki的库来处理HTTP请求。 用于发出请求的库方法的实际调用是在名为TemplateHelper的类文件(它不是从活动中调用)中进行的。 在我的TemplateHelper类中调用HttpRequest库的方法如下所示

 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会抛出exceptionandroid.os.NetworkOnMainThreadException 。 快速谷歌搜索向我展示了在单独的线程上运行HTTPRequest的代码。 但是,如果我在一个单独的线程中运行代码,我怎么能将结果返回到主线程?

您无法在主线程上发出网络请求。 你会得到你现在看到的错误。 您需要使用AsyncTask或者需要创建新线程。 就个人而言,我会使用AsyncTask 。 使用AsyncTask ,可以使用onPostExecute方法将值返回给主线程。

在TemplateHelper类中创建异步任务,异步任务在不同的线程中运行,因此不会出现主线程exception

查看本教程 ,这正是您需要做的。