Я пытаюсь показать некоторые новости на главном экране, и у меня есть этот код. Я хочу показать каждое новое, после того, как скажем 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);
}
}
Как я могу это исправить? Спасибо!
Android будет бросать активность, не отвечающую, если она заблокирована более 5 секунд. Смотрите, вероятно, почему вы не можете. Используйте для этого другой поток и обработчик, или asyncTask.
Используйте Сервис, чтобы делать сетевые материалы и разбор.
См. Документы Android или этот пример.
EDIT: Я думаю, что это может быть хорошей идеей, используя IntentService в этом случае и переопределить onHandleIntent()