Задать вопрос
@pmozil

Как спарсить сайт используя jsoup,чтобы вытащить 2 элемента и с помощью сообственного адаптера построить listView?

Идея такова,чтобы спарсить страницу сайта с новостями со скидками. Для этих целей написал адаптер который имеет 2 переменные title и price. так вот мне нужно чтобы каждая новость в listView имела 2 параметра: НАЗВАНИЕ и СКИДКА. Только не знаю,как это реализовать в методе doInBackgroung.Помогите плиз.
public class PromoActivity extends Activity {
public static final String TAG = "myLogs";
public ArrayList<News> newsList = new ArrayList<>();
private ListView lv;
public ProgressDialog pd;

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


}

public class Parse extends AsyncTask<String, Void, ArrayList<News>> {
    protected ArrayList<News> doInBackground(String... Params) {
        Document doc;
        Elements title;
        Elements price;
        try {
            doc = Jsoup.connect("http://www.groupon.pl/oferta/krakow").get();
            Log.d(TAG, "Pobrano stronę");
            price = doc.select(".deal-price");
            title = doc.select(".deal-tile-content");
            String p = String.valueOf(price);
            String t = title.toString();
            newsList.clear();
          // ЧТО ДОЛЖНО БЫТЬ СДЕСЬ?

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

    }

    protected void onPostExecute(ArrayList<News> result) {
        lv = (ListView) findViewById(R.id.lv);
        lv.setAdapter((new MyAdapter(PromoActivity.this,
                R.layout.list_item, result)));

        pd.dismiss();
    }
}

public void ok(View v) {
    pd = ProgressDialog.show(PromoActivity.this, "Pobieranie...", "proszę czekać", true, false);
    Log.d(TAG, "Button clicked");
    sprawdzPolaczenie(v);
}

public void sprawdzPolaczenie(View view) {
    ConnectivityManager connMgr = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        new Parse().execute();
    } else {
        Toast.makeText(PromoActivity.this, "Sprawdź polączenie z internetem", Toast.LENGTH_LONG).show();
        pd.dismiss();
    }
}


Это адаптер:
public class MyAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
static List<News> objects;
public Context context;

public MyAdapter(Context context, int item, List<News> newsList) {
    ctx = context;
    objects = newsList;
    lInflater = (LayoutInflater) ctx
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int position) {
    return objects.get(position);
}

@Override
public long getItemId(int position) {
    return objects.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    if (view == null) {
        view = lInflater.inflate(R.layout.list_item, parent, false);
    }
    News n = getNews(position);
    ((TextView) view.findViewById(R.id.tvName)).setText(n.mTitle);
    ((TextView) view.findViewById(R.id.tvPrice)).setText(String.valueOf(n.mPrice));

    return view;

}
News getNews(int position) {
    return ((News) getItem(position));
}


и сообственно сам класс News:
public class News {
String mTitle;
String mPrice;


public News(String title,Double price){
    mTitle = title;
    mPrice = price;

}
  • Вопрос задан
  • 323 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
a13xsus
@a13xsus
Lazy developer
Ну, очевидно, что в doInBackground() нужно создавать ArrayList и отдавать его в onPostExecute():

ArrayList<News> news = new ArrayList<>();
news.add(new News(t, Double.parseDouble(p));
return news;

А поскольку у тебя ArrayList уже есть (newsList), тогда

newsList.add(new News(t, Double.parseDouble(p));
return newsList;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы