AsyncTask не отвечает на каждый клик? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть проблема с Android AsyncTask. Во фрагменте я использую асинхронную задачу для потоковой передачи аудио с URL.Сначала кнопка воспроизведения запускается без каких-либо проблем, но когда я нажимаю, чтобы перейти к следующей песне, пользовательский интерфейс пропускает песню, когда я нажимаю снова в следующей кнопке, тогда она работает нормально.Это значит, что мне нужно щелкнуть два раза, чтобы выполнить следующую функцию кнопки. Вот мой класс асинхронных задач:

 private class LodingToFetchMp3Url extends AsyncTask<Void, Integer, String> {
    @Override
    protected void onPreExecute() {

        super.onPreExecute();


        pDialog = new ProgressDialog(getActivity());
        pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pDialog.setMessage("Loading...!");
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {


    }

    @Override
    protected String doInBackground(Void... params) {
        try {

            mediaPlayer.setDataSource(Constants.musicArrayListConstants.get(position).getMp3FileUrl());
            mediaPlayer.prepare(); // you must call this method after setup the datasource in setDataSource method. After calling prepare() the instance of MediaPlayer starts load data from URL to internal buffer.

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }


    @Override
    protected void onPostExecute(String result) {
        pDialog.dismiss();

        mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); // gets the song length in milliseconds from URL

        if (!mediaPlayer.isPlaying()) {



            mediaPlayer.start();
            imgPlayPause.setBackgroundResource(R.mipmap.btn_pause_black);
        } else {
            mediaPlayer.pause();
            imgPlayPause.setBackgroundResource(R.mipmap.btn_play);
        }

        primarySeekBarProgressUpdater();

        super.onPostExecute(result);
    }

}

primarySeekBarProgressUpdater ();Метод:

  private void primarySeekBarProgressUpdater() {
    seekBarProgress.setProgress((int) (((float) mediaPlayer.getCurrentPosition() / mediaFileLengthInMilliseconds) * 100)); // This math construction give a percentage of "was playing"/"song length"


    if (mediaPlayer.isPlaying()) {
        Runnable notification = new Runnable() {
            public void run() {
                primarySeekBarProgressUpdater();
            }
        };
        handler.postDelayed(notification, 100);
    }
}

Следующая кнопка onClick:

else if (v.getId() == R.id.imgNext) {

        if(Constants.dropsModelArrayListConstants.size() > position) {
            position = position + 1;

            mediaPlayer.pause();
            mediaPlayer = new MediaPlayer();

            lodingToFetchMp3Url.cancel(true);

            lodingToFetchMp3Url = new LodingToFetchMp3Url();
            lodingToFetchMp3Url.execute();
        }

    }
...