Java 主线程上的Android http请求错误

Java 主线程上的Android http请求错误,java,android,multithreading,Java,Android,Multithreading,我在Android应用程序中使用Kevin Sawicki的库进行HTTP请求。用于发出请求的库方法的实际调用是在名为TemplateHelper的类文件中进行的(它不是从活动中调用的)。在TemplateHelper类中调用HttpRequest库的方法如下所示 public static JSONObject GetTemplates() { try { return new JSONObject(HttpRequest.get("http://myapi.mycom

我在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的代码。但是,如果我在单独的线程中运行代码,如何将结果返回到主线程?

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

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


检查此项,这正是您需要做的。

不要。使用异步流。如果要使用
AsyncTask
onPostExecute()
方法将在任务完成后在主线程上运行。将向您展示如何使用
AsyncTask
实现
接口
,以便您可以在任务完成后获得对
main活动的
回调