实时聊天,在AsyncTask

时间:2019-07-12 23:05:25

标签: android android-recyclerview socket.io android-asynctask

您看到的是,我有一个recyclerview,每次它发出或从服务器上的.js节点注册新消息时都使用notifyItemInserted方法更新。 该过程如下:

1.-消息已准备好(文本,音频,图像,视频...在我的情况下,它是从android设备录制的音频)

2.-将内容发送到数据库(正如我提到的,在这种情况下,它是音频3.gp)

3.-PHP将插入数据库,上传音频文件并在操作成功的情况下返回结果

4.-当收到来自php的响应时,将发出内容,即: -服务器上文件的路由 -(消息ID,发送者,接收者等的内容...)

5.-在监听套接字的用户的另一端,这利用了notifyItemInserted函数添加信息,所有内容都在一个发出套接字的json类型对象中

6.-完成该过程后,会将网址和其他一些参数(MediaPlayer,SeekBar,Play_btn和Pause_btn)发送到AsyncTask,这将使MediaPlayer准备就绪并能够播放音频

问题: 当AsyncTask结束时,缓冲图标消失,而btn_Play仍然可见,当我单击该按钮时,它什么也不做!

代码:

@Override
protected Boolean doInBackground(String... strings) {
    Boolean prepared = false;

    try {



        try {
            mMediaPlayer.setDataSource(url);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.prepare();
            mMediaPlayer.setOnPreparedListener(mp -> {
                progressBar.setVisibility(View.GONE);
                play.setVisibility(View.VISIBLE);
            });
            mMediaPlayer.setOnCompletionListener(mp -> {
                mMediaPlayer.seekTo(0);
                play.setVisibility(View.VISIBLE);
                pause.setVisibility(View.GONE);
            });







        } catch (IOException e) { e.printStackTrace(); }



        prepared = true;

    } catch (Exception e) {
        Log.e("MyAudioStreamingApp", e.getMessage());
        prepared = false;
    }
    return prepared;
}

@Override
protected void onPostExecute(Boolean aBoolean) {
    super.onPostExecute(aBoolean);

    if (progressBar.getVisibility() == View.VISIBLE) {
        progressBar.setVisibility(View.GONE);
        play.setVisibility(View.VISIBLE);
        PreferenciasGlobales.GlobalMP = mMediaPlayer;
    }

    //mMediaPlayer.start();
    initialStage = false;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    //progressBar.show();
}

`

0 个答案:

没有答案