2

私が欲しいもの:ユーザーがウィジェットを追加すると、アラームマネージャーが追加されたウィジェットの更新を開始します。ウィジェットは、インターネット (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);
     }
}

問題は、テキストが更新されないことです。

4

1 に答える 1

3

次のようなonPostExecute()の文字列を見逃したと思います。

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

appWidgetManager.updateAppWidget(...)を呼び出すと更新が発生しますが、rv.setTextViewText(R.id.ip、html);だけを呼び出すと更新されます。-そうではありません。

お役に立てば幸いです。

于 2013-03-22T13:32:51.190 に答える