主要线程错误的Android http请求

时间:2013-10-11 17:03:24

标签: java android multithreading

我在我的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的代码。但是如果我在一个单独的线程中运行代码,我怎样才能将结果返回给主线程?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

在你的TemplateHelper类中创建异步任务,异步任务在不同的线程中运行,因此不存在主线程异常

选中tutorial,这正是您需要做的。