有没有一种方法可以在 android honeycomb 的主线程上调用网络 API 调用?
我正在创建一项服务和一个应用程序。应用程序可以调用服务上的方法。该方法调用API并基于API给出结果。由于该应用程序面向 android 3.0,因此我收到“NetworkOnMainThreadException”。
我的要求是这样一种方式,我无法从应用程序调用后台线程中的方法。此外,服务方法应根据 API 调用返回一个布尔值。
有没有一种方法可以在 android honeycomb 的主线程上调用网络 API 调用?
I am creating a service and an app. App can call a method on a service. The method is calling an API and based on API, giving the result. Since the app is targetting android 3.0, I am getting "NetworkOnMainThreadException".
My requirement is such a way that I cannot call the method in background thread from app. Also the method on service should return a boolean based on API call.
is there a way where I can call an network API call on main thread in android honeycomb?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
服务是“应用程序”的一部分。我假设你的意思是你写“应用程序”的地方的“活动”。
那么提出这个“要求”的人就是个白痴,应该被解雇。然后,删除此要求。始终在后台线程上执行网络操作。
这是因为默认情况下
StrictMode
会针对这些情况向您发出警告。虽然警告是新的,但运行代码的所有 Android 版本都存在该问题。这绝对不应该在生产代码中完成。重新设计您的应用程序以在后台线程上执行网络 I/O(例如,
AsyncTask
)。A service is a part of an "app". I am going to assume that you meant "activity" where you wrote "app".
Then whoever created this "requirement" is an idiot and should be fired. Then, remove this requirement. Always perform network operations on a background thread.
That is because
StrictMode
is on to warn you about these things by default. While the warning is new, the problem exists on all versions of Android your code is running on.This should never be done in production code. Rework your application to do the network I/O on a background thread (e.g.,
AsyncTask
).请注意:在 UI 线程上进行同步调用对于生产代码来说是可怕的编程实践 - 您应该始终在后台线程中进行异步调用,而不必以所示方式强制进行伪同步调用以下。
事实上,我发布此内容只是因为当我在 UI 线程上使用 AndroidHttpClient 进行网络调用以在完成实现之前进行简短的功能测试时,API 会引发异常,这让我感到恼火。 IE。测试用于后台线程的操作,而无需添加琐碎的代码,以便在您不需要它时使其成为后台线程。
Just a note: making synchronous calls on the UI thread is horrible programming practice for production code - you should always make asynchronous call in a background thread and never have to force a psuedo-synchronous call in the manner shown below.
In fact, I'm only posting this because I'm miffed that the API throws an exception when I make a network call using the AndroidHttpClient on the UI thread for brief functional testing before complete implementation. Ie. Testing an operation meant for a background thread without adding frivolous code to make it a background thread when you don't yet need it.