Spinner не становится видимым в нужное время?

Изначально spinner является Invisible.When нажата кнопка spinner.setVisibility (View.VISIBLE); () метод imageView.setImageBitmap(resultImage);вызывается. Но не делает прядильщик видимым до тех пор, пока не spinner.setVisibility(View.VISIBLE);будет выполнен.

т.е. public class MainActivity extends AppCompatActivity { ImageView imageView; Bitmap resultImage; Bitmap bitmap; ProgressBar spinner; public void downloadImage(View view){ ImageDownloader imageDownloader = new ImageDownloader(); spinner.setVisibility(View.VISIBLE); try { resultImage = imageDownloader.execute("https://upload.wikimedia.org/wikipedia/en/a/aa/Bart_Simpson_200px.png").get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } imageView.setImageBitmap(resultImage); //spinner.setVisibility(View.INVISIBLE); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView)findViewById(R.id.imageView); spinner = (ProgressBar) findViewById(R.id.spinner); } public class ImageDownloader extends AsyncTask<String,Void,Bitmap>{ @Override protected Bitmap doInBackground(String... params) { try { URL url = new URL(params[0]); HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); connection.connect(); InputStream inputStream = connection.getInputStream(); bitmap = BitmapFactory.decodeStream(inputStream); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } } } выполняется после загрузки изображения и установки изображения.

get()

android,multithreading,android-asynctask,

2

Ответов: 1


2 принят

Ваша проблема связана с вызовом downloadImageвнутри вашего execute("http.....")метода, что заставляет процесс ждать, чего вы не хотите.

Когда вы вызываете get(), он возвращает AsyncTask, который вы затем вызываете downloadImage, а затем ждет, пока результат не будет доступен. Представление не обновляется до тех пор, пока не будет выполнен прослушиватель onClick, который после завершения загрузки.

См. Документ для получения здесь

измените свой downloadImageметод на это.

public void downloadImage(View view){
    ImageDownloader imageDownloader = new ImageDownloader();
    imageDownloader.execute("https://upload.wikimedia.org/wikipedia/en/a/aa/Bart_Simpson_200px.png");
}

а затем переместите ваши манипуляции с изображениями в методы предварительного и последующего выполнения ImageDownloader. Открытый класс ImageDownloader расширяет AsyncTask {

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            URL url = new URL(params[0]);
            HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
            connection.connect();
            InputStream inputStream = connection.getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        spinner.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        imageView.setImageBitmap(bitmap);
        spinner.setVisibility(View.GONE);
    }
}
андроид, многопоточность, андроид-AsyncTask,
Похожие вопросы
Яндекс.Метрика