android - Один адаптер на все варианты парсинга
0
Делаю парсинг нескольких сайтов. Для запросов использую Retrofit2
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www...")
.addConverterFactory(PageAdapter.FACTORY)
.client(client)
.build();
Адаптер
class PageAdapter implements Converter<ResponseBody, Page> {
public static final Converter.Factory FACTORY = new Converter.Factory() {
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
if (type == Page.class) return new PageAdapter();
return null;
}
};
@Override
public Page convert(ResponseBody responseBody) throws IOException {
Document document = Jsoup.parse(responseBody.string());
Element value = document.getElementById("m_img");
String content = value.absUrl("src");
return new Page(content);
}
}
Page
class Page {
public String content;
public Page(String content) {
this.content = content;
}
}
Как можно написать один адаптер,для всех вариантов парсинга которые отличались бы разными тегам(с одного текст,с другого урл и т.д.),то есть метод convert.(Element value)
В итоге должно получится ,примерно, так
public void onResponse(Call<Site1> call, Response<Site1> response) {
Log.i("test1",response.body().content1);
}
...
public void onResponse(Call<Site2> call, Response<Site2> response) {
Log.i("test2",response.body().content2);
}
Источник
- 43
- 0
- 21 янв 2018 2018-01-21 22:35:14
- Rodion
Ответов пока нет
RetroJsoup
:D — Flippy 22 янв 20182018-01-22 08:21:19.000000Retrofit
если естьJsoup
=/ — Flippy 22 янв 20182018-01-22 08:20:52.000000