嗨,我的代码不完整。
以下是代码:
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();
}
}
}
我的问题是我应该把网址放在哪里,或者我该怎么做?
答案 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();
}