【问题标题】:Android http request on main thread error [duplicate]主线程错误的Android http请求[重复]
【发布时间】:2013-10-11 17:03:24
【问题描述】:

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

【问题讨论】:

  • 不要。使用异步流。
  • 如果你使用AsyncTaskonPostExecute()方法将在任务完成后在主线程上运行。
  • This answer 将向您展示如何使用AsyncTask 实现interface,这样您就可以在任务完成后将callBack 发送到MainActivity

标签: java android multithreading


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    检查这个tutorial,这正是你需要做的。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多