Java 主线程上的Android http请求错误
我在Android应用程序中使用Kevin Sawicki的库进行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
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活动的回调
。