0

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、そして私はそれが次の方法のためにそれであると思っています:

  1. jsonData から urlStrings を取得し、次に
  2. urlStrings から画像を 1 つずつダウンロードします。

つまり、REST に 2 回接続します。私も aHandlerを使用していますが、これはおそらく適切なオプションではありませんが、実際に a でテストしたところAsyncTask、同じ問題が発生しました。

私の問題を解決できるアイデアに感謝します。

補遺:

リストを非常に速くスクロールすると、画像が正しく読み込まれないことがわかりました。それ以外の場合は問題ありません。

4

3 に答える 3

0

ここUniversalImageLoaderからライブラリを使用します。それはほとんどエラーなしで動作します。メモリ処理、スレッド化、その他すべてを行います。

統合には 2 分かかります。やってみて !

于 2013-04-19T08:11:14.797 に答える
0

ああ少年!!イメージをダウンロードするたびにリストアダプターを設定しています。リストビューを使用するためのAndroidチュートリアルを使用してから、遅延画像読み込みを使用したリストビューを使用することをお勧めします。

リストビュー

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

画像処理

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

于 2013-04-19T08:15:20.783 に答える