您看到的是,我有一个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();
}
`