使用 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();
}
嗨,我有一个不完整的代码。
代码如下:
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();
}