java - Android http请求主线程错误

标签 java android multithreading

我在 Android 应用程序中使用 Kevin Sawicki 的库来处理 HTTP 请求。对发出请求的库方法的实际调用是在名为 TemplateHelper 的类文件中进行的(不是从 Activity 中调用的)。 。在我的 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;
}

根据我的 Activity ,我随后调用 TemplateHelper.GetTemplates()获取数据。但是,当我这样做时,Android 会抛出异常 android.os.NetworkOnMainThreadException 。 快速的 Google 搜索显示了在单独的线程上运行 HTTPRequest 的代码。但是如果我在单独的线程中运行代码,如何将结果返回到主线程?

最佳答案

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

关于java - Android http请求主线程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323573/

相关文章:

java - 为什么 Java 允许从接口(interface)多重继承但不允许从抽象/具体类继承

java - 子类的 JNI FindClass 格式?

java - 使用 ShareCompat 共享内容

java - Android - 如何并行运行多个线程

java - 如何在Java线程中应用reduce函数?

java - 如何在 JENA 中添加限定基数

java - 找不到包裹; javac

java - 如何操作重复标签的子字符串偏移量

java - 我的 Activity 如何在两种布局上运行?

java - Spark 中的 volatile 变量