HTMLをパースして画像をダウンロード&表示する方法
HTMLをパースするいい感じのライブラリを見つけたので、
ついでに別のライブラリを使ってパースした画像パスを元に画像をダウンロード&表示させるということをしてみました。
今回はAsyncTaskLoaderを使ってWikipediaのHTMLを取得し、
imgタグの画像をImageView(実体はWebView)に表示させる。
今回使用したライブラリ
JSOUP(HTMLパーサ)
http://jsoup.org/
Android Query(jQueryのように)
https://code.google.com/p/android-query/
実装
public class MyActivity extends ActionBarActivity implements LoaderManager.LoaderCallbacks<Document> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
MyAsyncTaskLoader appLoader = new MyAsyncTaskLoader(getApplication());
// loaderの開始
appLoader.forceLoad();
return appLoader;
}
@Override
public void onLoadFinished(Loader loader, Document doc) {
if (doc != null) {
// 取得成功
Element content = doc.getElementById("mp-tfa");
Elements images = content.getElementsByTag("img");
Element image = images.get(0);
String imagePath = "http:" + image.attr("src");
AQuery imageView = new AQuery(this);
imageView.id(R.id.imageView).visible().webImage(imagePath, true, false, 0);
Log.d("imagePath", imagePath);
}
}
@Override
public void onLoaderReset(Loader loader) {
}
/**
* A placeholder fragment containing a simple view.
*/
public class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_my, container, false);
getLoaderManager().initLoader(0, null, MyActivity.this);
return rootView;
}
}
public static class MyAsyncTaskLoader extends AsyncTaskLoader<Document> {
public MyAsyncTaskLoader(Context context) {
super(context);
}
@Override
public Document loadInBackground() {
Document doc = null;
try {
// HTML取得
doc = Jsoup.connect("http://en.wikipedia.org/wiki/Main_Page").get();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
}
}
activity_my.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MyActivity$PlaceholderFragment">
<WebView
android:id="@+id/imageView"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>