使用 AsyncTask 显示位图 url

Showing a bitmap url with AsyncTask

嗨,我有一个不完整的代码。

代码如下:

package com.example.AsyckTest;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class MyActivity extends Activity {
    Button button;
    ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    private void init() {
        button = (Button) findViewById(R.id.button);
        imageView = (ImageView) findViewById(R.id.imageView);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoadBitmap load = new LoadBitmap();
                load.execute("");
            }
        });
    }

    public class LoadBitmap extends AsyncTask<String, Void, Bitmap> {
        ProgressDialog pd = new ProgressDialog(MyActivity.this);

        @Override
        protected void onPreExecute() {

            super.onPreExecute();

        }

        @Override
        protected Bitmap doInBackground(String... params) {
 Bitmap b;
            try {
                b= BitmapFactory.decodeStream((InputStream)new URL(params[0]).getContent());
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;

        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (bitmap !=null){

            }else {

            }
            pd.dismiss();
        }

    }
}

我的问题是我应该把 url 放在哪里,或者我还应该做什么?

我想你首先要阅读更多关于 asynk Task 的内容。

load.execute("");

instead of passing an empty String, you have to pass the url

如果您想通过单击按钮显示图像。

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoadBitmap load = new LoadBitmap();
                load.execute("http://whosebug.com/");// Here is Url 
            }
        });

Other Wise 将这段代码放在 OnCreate

LoadBitmap load = new LoadBitmap();
                    load.execute("http://whosebug.com/");// Here is Url

更新

你可以这样使用它

@Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if (bitmap !=null){



     ImageView mImg;
mImg = (ImageView) findViewById(R.id.(your xml img id));
mImg.setImageBitmap(bitmap);
            }else {

        }
        pd.dismiss();
    }

将这段代码放在Asynktask的OnPostExecute方法中

您可以将 url 作为参数传递到异步任务构造函数中,也可以将其传递到执行函数中。

第一种方式更冗长,是一种通用的依赖注入和参数传递方法,适用于所有 classes 和对象,第二种方式特定于 class 提供的异步任务 class =37=]框架。

在构造函数中传递 url:

public class LoadBitmap extends AsyncTask<String, Void, Bitmap> {
    private String mUrl;

    public LoadBitmap(String url) {
        mUrl = url;
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        final String url = mUrl;
        // do stuff
    }
}

并使用它:

LoadBitmap loadBitmap = new LoadBitmap("http://www.example.com/path/to/image");
loadBitmap.execute();

在执行方法中传递参数:

public class LoadBitmap extends AsyncTask<String, Void, Bitmap> {
    @Override
    protected Bitmap doInBackground(String... params) {
        if (params.length == 0)
            throw new IllegalArgumentException("You should pass me a url!!");
        final String url = params[0];
        // do stuff
    }
}

并且可以这样使用:

LoadBitmap loadBitmap = new LoadBitmap();
loadBitmap.execute("http://www.example.com/path/to/image");

在您的代码中,您应该 return b 而不是 returning null。然后将该位图传递给 onPostExecute,在那里你可以对该位图做任何你想做的事情,例如你可以在你的 ImageView.

中显示它
    @Override
    protected Bitmap doInBackground(String... params) {
        Bitmap b = null;
        try {
            b = BitmapFactory.decodeStream((InputStream)new URL(params[0]).getContent());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return b;

    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if (bitmap !=null){
            imageView.setImageBitmap(bitmap);
        }
        pd.dismiss();
    }