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

アクティビティonCreate()で(私は推測します)。これに次のコードを独自のActivityメソッドに配置し、onPostExecute()内で呼び出します。

private void otherStuff() {
   // other stuff code
}
于 2012-10-31T19:01:38.990 に答える