Отображение массива в виджете главного экрана

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);

                }

Проблема в том, что мне удается показать один или два элемента, а затем он останавливается, потому что он говорит что-то вроде объекта, не заблокированного потоком перед 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);

            }

    }    

Как я могу это исправить? Спасибо!

  • 0
    Работа в сети не должна быть в потоке пользовательского интерфейса ...........
  • 0
    Можете ли вы навести меня на это? Спасибо!
Теги:
arrays
widget

2 ответа

0
Лучший ответ

Android будет бросать активность, не отвечающую, если она заблокирована более 5 секунд. Смотрите, вероятно, почему вы не можете. Используйте для этого другой поток и обработчик, или asyncTask.

0

Используйте Сервис, чтобы делать сетевые материалы и разбор.

См. Документы Android или этот пример.

EDIT: Я думаю, что это может быть хорошей идеей, используя IntentService в этом случае и переопределить onHandleIntent()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню