主线程上的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
查看本教程 ,这正是您需要做的。