1

サーバー データベースに 400 枚の画像があります。これらの画像を取得して、エミュレーターに表示できます。しかし、サーバーから画像を取得するのに時間がかかります。したがって、画像を非同期で取得したいと考えています。どうすればそのタスクを達成できますか? これについて私を助けてください...事前に感謝します....

以下のコードを非同期タスクに変換したいのですが……。

私のコード:

public View getView(.......)
{
ImageView myimgview = (ImageView) view.findViewById(R.id.imageView100);
drawable = LoadImageFromWebOperations(v.getTag().toString());
myimgview.setImageDrawable(drawable);
---
---
---
}

private Drawable LoadImageFromWebOperations(String url) {
try {
    InputStream is = (InputStream) new URL(url).getContent();
    Drawable d = Drawable.createFromStream(is, "image.png");
    return d;
    }
catch (Exception e) 
{
    System.out.println("Exc=" + e);
    return null;
}
} 
4

3 に答える 3

2

簡単な解決策は、Javaで非同期タスクを使用することです

いくつかの例を聞く

    private class DownloadImages AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
    //use your async task hear 
    //in your case call LoadImageFromWebOperations(urls[0])
    }

    @Override
    protected void onPostExecute(String result) {

    }
}

そして、必要な画像の URL を渡して、この非同期タスクを呼び出します

    DownloadImages task = new DownloadImages ();
    task.execute(new String[] { "http://your image url.com" });

このための良いチュートリアルを聞く

http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask

于 2012-06-24T15:41:28.247 に答える
0

私はすべての画像の読み込みにPrimeを使用していますが、これは簡単に処理できます。

于 2012-06-24T14:34:50.313 に答える
0

ハンドラーと組み合わせてスレッドを使用できます。

public void setImageInThread(final ImageView imageView, final String url) {
    final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message message) {
            Drawable result = (Drawable) message.obj;
            imageView.setImageDrawable(result);
        }
    };

    new Thread() {
        @Override
        public void run() {
            Drawable drawable = getDrawable(url);
            Message message = handler.obtainMessage(1, drawable);
            handler.sendMessage(message);
        }
    }.start();
}

getDrawable は、画像を同期的に取得する関数です。

于 2012-06-24T15:09:52.890 に答える