当前位置: 首页 > 知识库问答 >
问题:

小部件更新服务工作不正常

充昌勋
2023-03-14

当我试图从我的web服务器获取SOAP响应时,我的小部件更新服务抛出了一个:“android.os.NetworkOnMainThreadException”。

我确信SOAP代码没有错误,因为我只通过IntentService而不是服务在应用程序中使用相同的代码。

我根据最后一个示例设计了我的小部件:http://www.vogella.com/tutorials/AndroidWidgets/article.html

错误代码:08-26 19:22:14.931:带系统。err(16244):android。操作系统。NetworkOnMainThreadException 08-26 19:22:14.936:W/System。err(16244):在android上。操作系统。StrictMode$AndroidBlockGuardPolicy。网络(StrictMode.java:1125)08-26 19:22:14.941:W/System。err(16244):在java。网InetAddress。lookupHostByName(InetAddress.java:385)08-26 19:22:14.941:W/System。err(16244):在java。网InetAddress。getAllByNameImpl(InetAddress.java:236)08-26 19:22:14.941:W/System。err(16244):在java。网InetAddress。getAllByName(InetAddress.java:214)08-26 19:22:14.941:W/System。err(16244):在libcore。网http。HttpConnection。(HttpConnection.java:70)08-26 19:22:14.941:W/System。err(16244):在libcore。网http。HttpConnection。(HttpConnection.java:50)08-26 19:22:14.941:W/System。err(16244):在libcore。网http。HttpConnection$地址。连接(HttpConnection.java:340)08-26 19:22:14.941:W/System。err(16244):在libcore。网http。HttpConnectionPool。get(HttpConnectionPool.java:87)08-26 19:22:14.941:W/System。err(16244):在libcore。网http。HttpConnection。连接(HttpConnection.java:128)08-26 19:22:14.956:W/System。err(16244):在libcore。网http。高温高压发动机。openSocketConnection(HttpEngine.java:316)08-26 19:22:14.956:W/System。err(16244):在libcore。网http。高温高压发动机。连接(HttpEngine.java:311)08-26 19:22:14.956:W/System。err(16244):在libcore。网http。高温高压发动机。sendSocketRequest(HttpEngine.java:290)08-26 19:22:14.961:W/System。err(16244):在libcore。网http。高温高压发动机。sendRequest(HttpEngine.java:240)08-26 19:22:14.961:W/System。err(16244):在libcore。网http。HttpURLConnectionImpl。连接(HttpURLConnectionImpl.java:81)08-26 19:22:14.961:W/System。err(16244):在libcore。网http。HttpURLConnectionImpl。getOutputStream(HttpURLConnectionImpl.java:197)08-26 19:22:14.961:W/System。err(16244):在组织。ksoap2.运输。服务连接。openOutputStream(ServiceConnectionSE.java:120)08-26 19:22:14.961:W/System。err(16244):在组织。ksoap2.运输。HttpTransportSE。调用(HttpTransportSE.java:176)08-26 19:22:14.961:W/System。err(16244):在组织。ksoap2.运输。HttpTransportSE。调用(HttpTransportSE.java:114)08-26 19:22:14.961:W/System。err(16244):在com。aek。通话统计。UpdateWidgetService。soapGetOperators(UpdateWidgetService.java:280)08-26 19:22:14.961:W/System。err(16244):在com。aek。通话统计。UpdateWidgetService。callLogUpdate(UpdateWidgetService.java:245)08-26 19:22:14.966:W/System。err(16244):在com。aek。通话统计。UpdateWidgetService$1。完成(UpdateWidgetService.java:481)

共有1个答案

连时铭
2023-03-14

这是您的应用程序的安全问题,因为在您的应用程序的主线程上执行网络操作将阻止所有其他应用程序操作。重构您的Service以使用后台线程来执行网络操作并为您的小部件提供结果。您可以为此使用AsyncTask,或者更喜欢并使用您自己的线程池等。

 类似资料:
  • 需要更新时钟小部件的TextView每秒或每分钟变化。 我正在从AppWidgetProvider的onReceive调用服务: 我应该做什么来检查更新的时间,如果有,然后更新‘时间’文本视图… 任何一种都是非常非常非常感谢的

  • 问题内容: 下面显示的是我班的简化版本。我在onReceive方法上遇到了麻烦,该方法没有更新小部件TextView。它在logcat中显示正确的信息,该信息在setTextViewText之前的行上输出。我不确定出什么问题了,并且一直在拔头发(而且我已经秃顶了)。 } 问题答案: 找到了答案。调用后,您需要通过调用来更新窗口小部件。我添加的代码如下所示。

  • 在研究tkinter多线程时,我发现tkinter必须在主线程上运行(就像许多GUI框架),当一个单独的线程需要与GUI通信时,必须使用队列,而不是直接从工作线程访问小部件。 我试图学习使用队列方法,但当然最初我想看看如果我做错了会发生什么,所以我写了这段代码,它近似于Pi(π)几秒钟: 据我所知,由注释是问题。但是这个代码运行得很好。保持响应,标签和进度条都会更新。

  • 我在让Ajax正常工作方面遇到了问题。在我这里的xhtml文件中,我使用Ajax来呈现一些启用或禁用的输入,它可以正常工作。然而,更进一步,我还使用Ajax来呈现包含的xhtml文件,其中包含一个控件,并用id=“photoEnabled”标记。如果未选中该复选框,则会在其位置显示id=“photoDisabled”标记的虚拟显示,只是为了在页面上呈现整洁,并且该显示被禁用。 出于某种原因,这不起

  • 我使用sw-precache生成Polymer-CLI构建过程中的服务工作,因此它旨在更新更新文件的散列,以表示需要更新缓存。但是缓存中没有替换我更新的内容,因此如果我使用ctrl-r刷新,它将获得旧版本,但如果使用ctrl-shift-r刷新,它将获得新版本。原因可能是我的服务人员没有更新。 这份文件说 如果与当前相比,服务辅助程序文件中甚至有一个字节的差异,它就认为它是新的。 ,但如果我的新服

  • layout-widget.xml: background.xml: 来自DbAdapter.java的getTextViewData(): 有人知道我的代码中缺少了什么吗?