0

下面是我的异步课程

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

建议我哪里出错了。

4

1 回答 1

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
}
于 2012-10-31T19:01:38.990 回答