下面是我的Async类
public class GetBitMapFromURL extends AsyncTask<String, Integer, String>
{
byte[] tempByte;
private Bitmap bmap;
@Override
protected String doInBackground(String... params)
{
// TODO Auto-generated method stub
String stringUrl = params[0];
//bmap = null;
try
{
URL url = new URL(stringUrl);
InputStream is = (InputStream) url.getContent();
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = is.read(buffer)) != -1)
{
output.write(buffer, 0, bytesRead);
}
tempByte = output.toByteArray();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return "Success";
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
Bitmap tempBitMap = BitmapFactory.decodeByteArray(tempByte, 0, tempByte.length);
//Log.d("Bitmap bmap value on PostExecute", "bmap="+bmap);
setBitMap(tempBitMap);
//imageView.setImageBitmap(bImg);
}
void setBitMap(Bitmap bitMapSet)
{
this.bmap = bitMapSet;
//Log.d("Bitmap bmap value", "bmap="+bmap);
}
Bitmap returnBitmap()
{
//Log.d("Bitmap bmap value", "bmap="+bmap);
return bmap;
}
}
尽管在我的活动中执行了以下操作,但returnBitMap()返回null。
GetBitMapFromURL gbmap1 = new GetBitMapFromURL(); //Obtain medium bitmap
gbmap1.execute(applicationImageMediumURL);
if(gbmap1.getStatus() == AsyncTask.Status.FINISHED)
{
applicationMediumBitMap = gbmap1.returnBitmap();
}
建议我哪里出错了。
答案 0 :(得分:1)
不要这样做,使用AsyncTask.onPostExecute()方法来更新UI,如
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
applicationMediumBitMap = BitmapFactory.decodeByteArray(tempByte, 0, tempByte.length);
//Log.d("Bitmap bmap value on PostExecute", "bmap="+bmap);
// call any method on the activity to continue the process..
otherStuff();
}
并删除代码
if(gbmap1.getStatus() == AsyncTask.Status.FINISHED)
{
applicationMediumBitMap = gbmap1.returnBitmap();
}
// other stuff code
在Activity onCreate()中(我猜)。将以下代码放在自己的Activity方法中,并在onPostExecute()中调用它。
private void otherStuff() {
// other stuff code
}