2017-10-29 10 views
2

最初にスピナーが表示されません。ボタンを押すとdownloadImage()メソッドが呼び出されますが、spinner.setVisibility(View.VISIBLE);imageView.setImageBitmap(resultImage);が実行されるまでスピナーを表示しません。Spinnerは適切なタイミングでVisibleになっていませんか?

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; 

    } 
} 
} 
+0

uはこの作品this- –

答えて

2

あなたの問題は、それがプロセスは、あなたがしたくない、まさにである、待機させ、あなたのdownloadImageメソッド内get()を呼び出すことに関連しています。

execute("http.....")を呼び出すと、AsyncTaskが返され、次にget()が呼び出され、結果が利用可能になるまで待機します。ビューの更新は、ダウンロードが完了した後のonClickリスナーが完了するまで行われません。

See the doc for get here

これにあなたの 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); 
    } 
} 
+0

を試してみました!! .....感謝を拡張します –

関連する問題