android - 从 AsyncTask 更新两个独立的小部件

标签 android json multithreading widget

我想要什么: 当用户添加小部件时,警报管理器开始更新添加的小部件。 该小部件从互联网获取数据(json 资源)。 该小部件使用专用的 json 页面(每个小部件都有一个获取数据的页面:例如 test.json?page=5)

我已经有一个扩展 AppWidgetProvider 的类。 在这个类中有一个函数:private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) 这个函数里面有:

remoteViews = new RemoteViews(context.getPackageName(),  R.layout.widget);
new HttpRequestTask(SELECTED_PAGE).execute(remoteViews);

这是 HttpRequestTask 类:

 class HttpRequestTask extends AsyncTask<RemoteViews, Void, String> {

        private RemoteViews rv;
        private String url;

        public HttpRequestTask(String string) {
            url = string;
        }

        protected String doInBackground(RemoteViews... contextParam) {
            String html = "";
            try {
                rv = contextParam[0];
                HttpClient client = new DefaultHttpClient();
                HttpGet request 

= new HttpGet("http://www.hwlogos.com/"+url+".txt");
            HttpResponse response;      
            response = client.execute(request);     

            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null)
            {
                str.append(line);
            }
            in.close();
            html = str.toString();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return html;
     }

     protected void onPostExecute(String html) {
         rv.setTextViewText(R.id.ip, html);
     }
}

问题是文本没有更新!

最佳答案

我认为您错过了 onPostExecute() 中的字符串,例如:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
appWidgetManager.updateAppWidget(allWidgetIds, rv);

当您调用 appWidgetManager.updateAppWidget(...) 时会发生更新,但当您仅调用 rv.setTextViewText(R.id.ip, html); 时会发生更新- 事实并非如此。

希望对您有所帮助。

关于android - 从 AsyncTask 更新两个独立的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885066/

相关文章:

javascript - 为什么我的 json 没有被 Mustache 解析?

json - Flutter/Dart Json序列化

c++ - std::condition_variable::notify_all() - 我需要一个例子

vb.net - 尝试更新线程内的GUI(从BackgroundWorker开始)

android - 在android中的两个日期值之间获取SQLite表中值的总和

Android - ImageView 只有一个圆角

json - 如何使用 PYTHON 以字典类型而不是字符串类型获取 JSON.loads() 输出

android - 使用 AsyncTask 打开相机

android - 备用聊天气泡宽度

java - 让 Imageview 区分单击和滚动