1

ホーム画面にニュースを表示しようとしていますが、このコードがあります。配列から5秒後にすべての新しいものを表示したいと思います。

public class PointlessWidget extends AppWidgetProvider{

static final String DATA_TITLE = "T";
static final String DATA_LINK  = "L";
static LinkedList<HashMap<String, String>> data1;
static String feedUrl;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
    feedUrl = "http://www.blabla.com";


            XMLParser parser = new XMLParser(feedUrl); 
                data1 = (LinkedList<HashMap<String, String>>)parser.parse();
                                Iterator<HashMap<String, String>> itr = data1.iterator();
                Object element;
                HashMap<String, String> entry;
                String Temp_URL=null,Temp_TITULO=null,Actual_URL,Actual_TITULO,Anterior_URL = null,Anterior_TITULO,Sigiente_URL,Sigiente_TITULO;

                while (itr.hasNext()) {
                    element = itr.next();
                    entry = (HashMap<String, String>) element;
                    mierda = entry.get("T");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    v.setTextViewText(R.id.word_title, mierda);
                    AppWidgetManager manager = AppWidgetManager.getInstance(context);
                    manager.updateAppWidget(appWidgetIds, v);
                    Log.i("***Selected Tab", "Im currently in tab with index::" + mierda);

                }

問題は、1つまたは2つの要素を表示できた後、wait()の前にスレッドによってロックされていないオブジェクトのようなものを示しているために停止することです。

どうすればこれを実装できますか?大いに感謝する


サービスを実装しましたが、それでもANRエラーがスローされます。

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
        // To prevent any ANR timeouts, we perform the update in a service
        context.startService(new Intent(context, UpdateService.class));
    }

    public static class UpdateService extends Service {
        @Override
        public void onStart(Intent intent, int startId) {
            // Build the widget update for today
            RemoteViews v = new RemoteViews(this.getPackageName(), R.layout.widget_layout);
            feedUrl = "http://www.blabla.com";


                    XMLParser parser = new XMLParser(feedUrl); 
                        data1 = (LinkedList<HashMap<String, String>>)parser.parse();
                        int size = data1.size();
                        Iterator<HashMap<String, String>> itr = data1.iterator();
                        Object element;
                        HashMap<String, String> entry;
                        String Temp_URL=null,Temp_TITULO=null,Actual_URL,Actual_TITULO,Anterior_URL = null,Anterior_TITULO,Sigiente_URL,Sigiente_TITULO;

            while (itr.hasNext()) {
                element = itr.next();
                entry = (HashMap<String, String>) element;
                mierda = entry.get("T");

                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                v.setTextViewText(R.id.word_title, mierda);
                ComponentName thisWidget = new ComponentName(this, PointlessWidget.class);
                AppWidgetManager manager = AppWidgetManager.getInstance(this);
                manager.updateAppWidget(thisWidget, v);
                Log.i("***Selected Tab", "Im currently in tab with index::" + mierda);

            }

    }    

どうすればこれを修正できますか?ありがとうございました!

4

2 に答える 2

0

Androidは、5秒以上ブロックされている場合、応答しないアクティビティをスローします。これを参照してください。これが、おそらくできない理由です。別のスレッドハンドラー、またはそのためのasyncTaskを使用します。

于 2012-06-23T17:09:05.563 に答える
0

サービスを使用して、ネットワークの処理と解析を行います。

Androidドキュメントまたはこのを参照してください。

編集:この場合はIntentServiceを 使用してオーバーライドすることをお勧めしますonHandleIntent()

于 2012-06-23T17:09:58.893 に答える