1

我在我的 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。快速的 Google 搜索显示了在单独的线程上运行 HTTPRequest 的代码。但是如果我在单独的线程中运行代码,我怎样才能将结果返回到主线程?

4

2 回答 2

3

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

于 2013-10-11T17:08:19.957 回答
0

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

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

于 2013-10-11T17:10:43.207 回答