Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer减慢listview速度_Android_Listview_Android Mediaplayer - Fatal编程技术网

Android MediaPlayer减慢listview速度

Android MediaPlayer减慢listview速度,android,listview,android-mediaplayer,Android,Listview,Android Mediaplayer,我有一个列表视图,其中列出了录音。当我点击其中一个播放时,它就会从互联网上消失,检索音频并播放。播放时,滚动锁定 一旦MediaPlayer停止,我可以像正常一样滚动。这不是线程问题,因为MediaPlayer正在另一个线程上播放 这是MediaPlayer的异步任务: private class PlayAudio extends AsyncTask<String, Integer, String> { @Override protected String doIn

我有一个
列表视图
,其中列出了录音。当我点击其中一个播放时,它就会从互联网上消失,检索音频并播放。播放时,滚动锁定

一旦
MediaPlayer
停止,我可以像正常一样滚动。这不是线程问题,因为
MediaPlayer
正在另一个线程上播放

这是MediaPlayer的异步任务:

private class PlayAudio extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground(String... params) {
        nowPlaying = true;

        player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {

                if(isAdded()) {
                    stopAudio();
                }

                PvmUtils.longToast(context, getString(R.string.error_load_msg));
                return false;
            }
        });

        player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                setButtonColors(2);
            }
        });

        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                stopAudio();

                sendPostMessageRead(new Callbacks.SendPostMessageReadCallback() {
                    @Override
                    public void sendPostMessageReadCallback(boolean gotMessageReadResponse) {
                        if (gotMessageReadResponse) {
                            MessageLog message = log.get(listPosition);
                            message.setMessageStatus("read");

                            if (message.isReply()) {
                                currentMetaTextView.setText("");
                                MyFcmListenerService.newMessages--;
                                ShortcutBadger.applyCount(context, MyFcmListenerService.newMessages);
                            }

                        } else {
                            Log.d(LOG_TAG, "sendPostMessageReadCallback returned false, error may have occurred");
                        }
                    }
                });
            }
        });

        player.setAudioStreamType(AudioManager.STREAM_MUSIC);


        try {
            //Uri uri = Uri.parse(Keys.getpvmURL() + "android/retrieveMessage?messageId=" + params[0]);
            //player.setDataSource(params[0].replaceFirst("https","http"));
            Uri uri = Uri.parse(params[0]);
            Map<String, String> headers = new HashMap<>();
            headers.put("authorisation", encryption.getID().toString());
            player.setDataSource(context, uri, headers);

        } catch (IOException e) {
            e.printStackTrace();
            stopAudio();
        } try {
            player.prepare();
        } catch (IOException e) {
            e.printStackTrace();
            stopAudio();
        }

        player.start();
        return null;
    }
}
私有类PlayAudio扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
现在玩=真;
player.setOneRorListener(新的MediaPlayer.OneRorListener(){
@凌驾
公共布尔onError(MediaPlayer mp,int what,int extra){
if(isAdded()){
停止音频();
}
longToast(上下文,getString(R.string.error\u load\u msg));
返回false;
}
});
player.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
退刀颜色(2);
}
});
player.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
停止音频();
sendPostMessageRead(新回调。SendPostMessageReadCallback(){
@凌驾
public void sendpostmessageradcallback(布尔gotMessageReadResponse){
if(gotMessageReadResponse){
MessageLog message=log.get(listPosition);
message.setMessageStatus(“读取”);
if(message.isReply()){
currentMetaTextView.setText(“”);
MyFcmListenerService.newMessages--;
ShortcutBadger.applyCount(上下文,MyFcmListenerService.newMessages);
}
}否则{
d(Log_标记,“sendpostmessageradcallback返回false,可能发生错误”);
}
}
});
}
});
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
试一试{
//Uri=Uri.parse(Keys.getpvmURL()+“android/retrieveMessage?messageId=“+params[0]);
//player.setDataSource(参数[0].replaceFirst(“https”、“http”);
Uri=Uri.parse(参数[0]);
Map headers=newhashmap();
headers.put(“授权”,encryption.getID().toString());
setDataSource(上下文、uri、标题);
}捕获(IOE异常){
e、 printStackTrace();
停止音频();
}试一试{
player.prepare();
}捕获(IOE异常){
e、 printStackTrace();
停止音频();
}
player.start();
返回null;
}
}
这是列表项的clicklistener:

    ListAdapter newAdapter = new ListAdapter(getActivity());

    if (this.log == null) {
        list.setAdapter(populateAdapter(newAdapter,new ArrayList<MessageLog>()));
    } else {
        list.setAdapter(populateAdapter(newAdapter,log));
    }


    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(LOG_TAG, Integer.toString(position));

            if (log != null && position < log.size()) {
                if (!nowPlaying && log.get(position).getUrl() != null) {
                    try {
                        stopAudio();
                        setButtonColors(0, currentPlaying);

                        // Show the play controls.
                        currentPlaying = position;
                        nowPlaying = true;
                        player = new MediaPlayer();
                        player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
                        listPosition = position;
                        currentButton = view;
                        Log.d(LOG_TAG, log.get(position).getUrl());
                        /*
                        MessagePlaybackDialogFragment playFrag = MessagePlaybackDialogFragment.newInstance(log.get(listPosition),
                                new Callbacks.OnPlaybackFinishedListener() {
                            @Override
                            public void onPlaybackDone() {
                                // TODO set as not new
                            }
                        });
                        playFrag.show(getFragmentManager(), "playFrag");*/

//                            MessagePlaybackDialogFragment playFrag = MessagePlaybackDialogFragment.newInstance(log.get(listPosition));
//                            playFrag.show(getFragmentManager(), "playFrag");

                        currentMetaTextView = (TextView) view.findViewById(R.id.voiceMessageMetaText);
                        currentPlayPauseImageView = (ImageView) view.findViewById(R.id.voiceMessagePlayPauseImage);
                        currentMessageBackground = (RelativeLayout) view.findViewById(R.id.voiceMessageRectangleBackground);

                        setButtonColors(1);
                        currentAudio = new PlayAudio().execute(log.get(listPosition).getUrl());
                    } catch (Exception e) {
                        stopAudio();
                        e.printStackTrace();
                    }
                } else if (position == listPosition){
                    stopAudio();
                } else if (nowPlaying){
                    stopAudio();

                    currentPlaying = position;
                    player = new MediaPlayer();
                    player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
                    listPosition = position;
                    currentButton = view;
                    Log.d(LOG_TAG, log.get(position).getUrl());
                    currentMetaTextView = (TextView) view.findViewById(R.id.voiceMessageMetaText);
                    currentPlayPauseImageView = (ImageView) view.findViewById(R.id.voiceMessagePlayPauseImage);
                    currentMessageBackground = (RelativeLayout) view.findViewById(R.id.voiceMessageRectangleBackground);

                    setButtonColors(0, currentPlaying);
                    setButtonColors(1);

                    currentAudio = new PlayAudio().execute(log.get(listPosition).getUrl());
                }
            }
        }
    });
ListAdapter newAdapter=newlistadapter(getActivity());
if(this.log==null){
setAdapter(populateAdapter(newAdapter,newArrayList());
}否则{
setAdapter(populateAdapter(newAdapter,log));
}
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.d(Log_标记,Integer.toString(位置));
if(log!=null&&positionmp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
                    mp.setDataSource(a.getUrl());
                    mp.prepareAsync();
                    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            activityList.get(position).setDuration(mp.getDuration()/1000);
                            holder.playButton.clearAnimation();
                            mp.start();
                        }
                    });