Fqyeh29
@Fqyeh29
↓ ИМХО ↓

Как заполнить ListView?

Не могу засунуть ячейки спарсенной страницы в ListView.
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import static android.R.layout.simple_list_item_1;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    private Context mContext;
    private TextView myTextView;
    class MyTask extends AsyncTask<Void, Void, Void> {

        String title;

        @Override
        protected Void doInBackground(Void... params) {
            ListView listView = (ListView) findViewById(R.id.listView);

            // Создаём пустой массив для хранения имен котов
            final ArrayList<String> catnames = new ArrayList<String>();

            // Создаём адаптер ArrayAdapter, чтобы привязать массив к ListView
            final ArrayAdapter<String> adapter;
            adapter = new ArrayAdapter<String>(mContext,android.R.layout.simple_list_item_1, catnames);

            // Привяжем массив через адаптер к ListView
            listView.setAdapter(adapter);
            try {
                Connection.Response res= Jsoup
                        .connect("https://site.ru")
                        .method(Connection.Method.GET)
                        .execute();


                res= Jsoup
                        .connect("https://www.site.ru/login/")
                        .data("login","123")
                        .cookies(res.cookies())
                        .data("password","321")
                        .method(Connection.Method.POST)
                        .execute();


                Elements ele = doc.select("font[face=arial]");
                title = ele.text();


                String text;
                for( Element element : doc.select("td#ele_id") ) 
                {
                    text = element.text(); // Get the Text of the Link

                    catnames.add(0,text);
                    adapter.notifyDataSetChanged();
                }
               // Iterator<Element> iterator = ele.listIterator();


               // Element element = iterator.next();



            } catch (IOException e) {
                // e.printStackTrace();
                myTextView.setText("error");
            }


            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            myTextView.setText(title);
        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = this;
        myTextView = (TextView) findViewById(R.id.textView);

        MyTask mt = new MyTask();
        mt.execute();

    }
}


Я так понял listView.setAdapter(adapter); нужно засунуть в onCreate, но jsoup туда не получается засунуть.
  • Вопрос задан
  • 654 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Нельзя общаться с элементами UI не из MainThread. Вы это делаете в doInBackground(). Отдавайте catnames в качестве результата doInBackground, и просечивайте массив в адаптер один раз в onPostExecute. Это как минимум.
А вообще асинктаски для сетевого взаимодействия использовать нехорошо. Есть нормальные библиотеки для этого, например - Retrofit.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы