我在 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/