我在我的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会抛出异常android.os.NetworkOnMainThreadException
。
快速谷歌搜索向我展示了在单独的线程上运行HTTPRequest的代码。但是如果我在一个单独的线程中运行代码,我怎样才能将结果返回给主线程?
答案 0 :(得分:3)
您无法在主线程上发出网络请求。您将收到您现在看到的错误。您需要使用AsyncTask
或者需要创建新线程。就个人而言,我使用AsyncTask
。使用AsyncTask
时,可以使用onPostExecute
方法将值返回到主线程。
答案 1 :(得分:0)
在你的TemplateHelper类中创建异步任务,异步任务在不同的线程中运行,因此不存在主线程异常
选中tutorial,这正是您需要做的。