ListView に遅延読み込みイメージを実装したいと考えています。まず、URL に接続して、オブジェクトに属するすべての画像の urlStrings を取得する必要があります。jsonString を取得してから解析します。
String RESTUrl = new MasterdataDataProvider(mContext).getSyncServicePath() + "PhotoInfo/" + objectEntryID;
List<String> urlStrings = new ArrayList<String>();
try {
HttpGet httpGet = new HttpGet((RESTUrl + "/" + token));
HttpParams httpParameters = new BasicHttpParams();
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
httpGet.addHeader("Accept", "application/json");
httpGet.addHeader("Content-Type", "application/json");
HttpResponse response = httpClient.execute(httpGet);
String jsonData = EntityUtils.toString(response.getEntity());
if (!jsonData.equals("[]")) {
GsonPhotoInfo x = new GsonPhotoInfo(new GsonBuilder());
PhotoInfo[] info = x.parseJSON(jsonData);
for(PhotoInfo p : info) {
System.out.println(p.getFileName());
urlStrings.add(photoWebURL + objectDefID + "/" + objectEntryID + "/" + p.getFileName());
}
}
} catch(Exception e) {
e.printStackTrace();
}
このコードでわかるように、FileName from jsonData
.
次に、urlStrings から画像をダウンロードする必要があります。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
ImagePagerAdapter adapter = new ImagePagerAdapter((Drawable[]) message.obj);
viewPager.setAdapter(adapter);
}
};
Thread thread = new Thread() {
@Override
public void run() {
//PARSE THE JSON DATA and FETCH URLStrings (as you see in the piece of code at top)
Drawable[] drawables = new Drawable[urlStrings.size()];
for(int i=0; i< urlStrings.size(); i++)
drawables[i] = fetchDrawable(urlStrings.get(i));
Message message = handler.obtainMessage(1, drawables);
handler.sendMessage(message);
}
};
thread.start();
画像を取得するコードは、James Wilson answerから取得されます。
そこでもわかるように、HTTPClient をもう一度使用してすべての画像をダウンロードする必要があります。
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
問題は、リストビューで機能していないことです。The images are not loaded correctly in listView sometimes
、そして私はそれが次の方法のためにそれであると思っています:
- jsonData から urlStrings を取得し、次に
- urlStrings から画像を 1 つずつダウンロードします。
つまり、REST に 2 回接続します。私も aHandler
を使用していますが、これはおそらく適切なオプションではありませんが、実際に a でテストしたところAsyncTask
、同じ問題が発生しました。
私の問題を解決できるアイデアに感謝します。
補遺:
リストを非常に速くスクロールすると、画像が正しく読み込まれないことがわかりました。それ以外の場合は問題ありません。