使用AsyncTask显示位图网址

时间:2015-11-29 09:44:26

标签: android android-asynctask bitmapfactory

嗨,我的代码不完整。

以下是代码:

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();
        }

    }
}

我的问题是我应该把网址放在哪里,或者我该怎么做?

2 个答案:

答案 0 :(得分:0)

我认为首先你要了解一下asynk Task。

load.execute( “”);

  

而不是传递空字符串,你必须传递网址

如果要使用按钮单击显示图像。

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

其他Wise将这段代码放在OnCreate

@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方法

答案 1 :(得分:0)

您可以在异步任务构造函数中传递url作为参数,也可以在execute函数中传递它。

第一种方式更详细,是一种适用于所有类和对象的通用依赖注入和参数传递方法,第二种方式特定于Android框架提供的异步任务类。

在构造函数中传递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");

在您的代码中,您应返回null,而不是返回b。然后将该位图传递给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();
    }