2015-07-09 3 views
0

мне нужно загрузить изображение из Интернета в моем приложении, я нашел хороший пример здесь, но я не могу понять, как использовать возвращаемый Bitmap в моей основной деятельности:Android AsyncTask, как вернуть результат?

класс:

public class GetImageFromServer extends AsyncTask<Void, Void, Bitmap { 
    private String sURL; 

    GetImageFromServer(String urlParam) { 
     sURL = urlParam; 
    } 

    @Override 
    protected Bitmap doInBackground(Void... urlParam) { 

     Bitmap bmp = null; 

     //ImageView img = (ImageView) findViewById(R.id.imageView1); 
     try { 
      URL url = new URL(sURL); 
      bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
     } catch (Exception ex) { 
      Log.println(1, "Profile:getImg", ex.getMessage()); 
     } 
     return bmp; 
    } 

    @Override 
    protected void onPreExecute() {} 
} 

И код MainActivity:

String urlImage = "http://www.xxxxxx.com/css/images/xxxxxx.png"; 
GetImageFromServer gifs = new GetImageFromServer(urlImage); 
gifs.execute(); 

if(person.has("Avatar")) {Avatar.setImageBitmap(gifs.execute())} 

ошибка:
gifs.execute()

Спасибо за помощь!

Добавить:

Я добавил это «отменить (правда)», потому что у меня есть проблемы с подключением к JSON веб-сервисов после severals запуска/отладки/близко, но я, кажется, не работает:

@Override 
protected Bitmap doInBackground(String... urlParam) { 
    if (isCancelled()) 
     this.cancel(true); 


    Bitmap b = null;........   

и

@Override 
protected void onPostExecute(Bitmap result) { 
    // use the result 
    mImageView.setImageBitmap(result); 
    this.cancel(true); 
} 

Могли assynctasks предотвратить мое приложение для подключения к моей веб-сервисов?

+5

чек [это] (http://stackoverflow.com/questions/16752073/how-do- i-return-a-boolean-from-asynctask) – Blackbelt

ответ

1

Существует хорошая библиотека для выполнения нагрузок асинхронных изображений, вот ссылка: https://github.com/square/picasso.

Или вы могли бы следовать этому подходу:

public class LoadImageAsyncTask extends AsyncTask<String, Void, Bitmap> { 

private ImageView mImageView; 

    public LoadImageAsyncTask(ImageView imageView) { 
     mImageView = imageView; 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     Bitmap bitmap = null; 
     try { 
      URL url = new URL(params[0]); 
      bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 


     } catch (Exception ex) { 
      Log.println(1, "Profile:getImg", ex.getMessage()); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     mImageView.setImageBitmap(bitmap); 
    } 
} 

в вызове деятельности:

LoadImageAsyncTask task = new LoadImageAsyncTask(findViewById(R.id.yourImageId)).execute(stringUrl); 
+0

Да, это работает !! Спасибо, просто немного modif: GetImageFromServer task = (GetImageFromServer) новый GetImageFromServer (Аватар) .execute (urlImage); – Alexus

+0

Добро пожаловать, bro =) – esthetic

0

вы должны реализовать функцию обратного вызова

вашего AsyncTask

public class GetImageFromServer extends AsyncTask<Void, Void, Bitmap> { 

    private String sURL; 
    private Bitmap b; 
    YourCallback mOwner; 

    GetImageFromServer(YourCallback owner, String urlParam) { 
     sURL = urlParam; 
     mOwner = owner; 
    } 

    @Override 
    protected Bitmap doInBackground(Void... urlParam) { 
     try { 
      URL url = new URL(sURL); 
      b = BitmapFactory.decodeStream(url.openConnection() 
        .getInputStream()); 

     } catch (Exception ex) { 
      Log.println(1, "Profile:getImg", ex.getMessage()); 
     } 
     return b; 
    } 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     // use the result 
     super.onPostExecute(result); 
     if (mOwner != null) 
      mOwner.CallbackFunction(result); 
    } 

    public interface YourCallback { 
     void CallbackFunction(Bitmap result); 
    } 
} 

ваш MainActivity

public class MainActivity extends Activity implements YourCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     GetImageFromServer gifs = new GetImageFromServer(urlImage, b); 
     gifs.execute(); 
    } 

    @Override 
    public void CallbackFunction(Bitmap result) { 
     if (person.has("Avatar")) { 
      Avatar.setImageBitmap(result); 
     } 

    } 

} 
Смежные вопросы