2015-05-14 3 views
0

Мне нужен совет, потому что эта вещь заняла у меня достаточно времени, чтобы рассердиться на меня из-за недостатка знаний ... Я пытаюсь создать ListView, заполненный данными JSOUP. И часть JSOUP находится в AsyncTask. Вот мой код:Android - ListView с реализацией AsyncTask с использованием JSOUP

public class ListaActivity extends ActionBarActivity { 

    private List<String> mList = new ArrayList<>(); 
    private ListView mListView; 
    private ListAdapter mAdapter; 

    public Elements job; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 

     mListView = (ListView) findViewById(R.id.list); 

     new NewThread().execute(); 
     mAdapter = new ListAdapter(this, mList); 
     mListView.setAdapter(mAdapter); 
    } 

    public class NewThread extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... arg) { 

      Document doc; 
      try { 
       doc = (Document) Jsoup.connect("http://www.somewebsite.com") 
         .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0").get(); 

       title = doc.select("h3.something-to-extract a[href]"); 

       for (Element titles : title) { 
        mList.add(titles.text()+"\n"); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 
    } 
} 

ИМО это что-то с JSOUP части, потому что когда я удалить все содержимое од doInBackground и положить внутрь только

mList.add("Something 1"); 
mList.add("Something 2"); 

затем он работает. Пожалуйста, помогите мне как-нибудь.

EDIT: Я хочу, чтобы разобрать данные из этого фрагмента HTML:

<h2 class="title"> 
     <a href="/jstpl/london/11697582" 
       title="You just have to wait" class="titles"> 
        Nothing else to say 
     </a> 

Я хотел сохранить "Nothing else to say" в mList, такие как еще названия существующих в моем HTML коде. Работает только одна парсинговая часть.

+0

Можете ли вы предоставить образец HTML заголовка, который вы пытаетесь извлечь? –

+0

Я думаю, проблема в том, что вы не вызываете 'notifyDataSetChanged' на' mAdapter'. Я опубликовал как ans ниже .. –

ответ

1

Вы должны вызвать notifyDataSetChanged на адаптере

Отражать изменения в списке предоставляемых адаптером. Для того, чтобы сделать это -

переопределение onPostExecute в вашем NewThread и вызвать mAdapter.notifyDataSetChanged()

 @Override 
     protected void onPostExecute(String result) { 
      mAdapter.notifyDataSetChanged(); 
     } 

Примечание:onPostExecute работает на основном потоке пользовательского интерфейса, а не ваши NewThread, где, как doInBackground работает внутри вашей NewThread. И onPostExecute вызывается, когда выполняется фоновый поток. Теперь, когда мы обновили список с новыми элементами. Мы сообщим об адаптере, работающем на основном потоке. Надеюсь, поможет.

+0

Я сам понял, что мой адаптер не знает о изменениях в списке, но спасибо, что рассказал мне, как уведомлять его :) Спасибо за все! – Edmundo

+0

Я рад помочь! Хорошего дня :)) –

Смежные вопросы