简体   繁体   English

java.lang.StackOverflowError:android studio上的堆栈大小为8MB。 怎么解决?

[英]java.lang.StackOverflowError: stack size 8MB on android studio. How to solve it?

As my application i run in android studio got this problem. 正如我在android studio中运行的应用程序遇到了这个问题。

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.user.brain_storming, PID: 11742
    java.lang.StackOverflowError: stack size 8MB
        at com.example.user.brain_storming.MusicService$1.onError(MusicService.java:48)
        at com.example.user.brain_storming.MusicService$1.onError(MusicService.java:48)

And i have check the code the line 48 is this 我已经检查了第48行的代码

    mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

        public boolean onError(MediaPlayer mp, int what, int
                extra) {

            onError(mPlayer, what, extra);
            return true;
        }
    });

I dun know how to solve it and i had go to enable the advanced profiling as i refer to this website. 我知道如何解决它,我已经开始启用高级分析,因为我引用了这个网站。 But its not work =( 但它不起作用=(

InputConnectionWrapper.commitText StackOverflowError in HTC devices HTC设备中的InputConnectionWrapper.commitText StackOverflowError

The code below is my music service code 下面的代码是我的音乐服务代码

public class MusicService extends Service implements MediaPlayer.OnErrorListener {

    private final IBinder mBinder = new ServiceBinder();
    MediaPlayer mPlayer;
    private int length = 0;

    public MusicService() {
    }

    public class ServiceBinder extends Binder {
        MusicService getService() {
            return MusicService.this;
        }
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return mBinder;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mPlayer = MediaPlayer.create(this, R.raw.play);
        mPlayer.setOnErrorListener(this);

        if (mPlayer != null) {
            mPlayer.setLooping(true);
            mPlayer.setVolume(50, 50);
        }


        /*mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

            public boolean onError(MediaPlayer mp, int what, int
                    extra) {

                onError(mPlayer, what, extra);
                return true;
            }
        });*/
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (mPlayer != null) {
            mPlayer.start();
        }
        return START_NOT_STICKY;
    }

    public void pauseMusic() {
        if (mPlayer != null) {
            if (mPlayer.isPlaying()) {
                mPlayer.pause();
                length = mPlayer.getCurrentPosition();
            }
        }
    }

    public void resumeMusic() {
        if (mPlayer != null) {
            if (!mPlayer.isPlaying()) {
                mPlayer.seekTo(length);
                mPlayer.start();
            }
        }
    }

    public void startMusic() {
        mPlayer = MediaPlayer.create(this, R.raw.play);
        mPlayer.setOnErrorListener(this);

        if (mPlayer != null) {
            mPlayer.setLooping(true);
            mPlayer.setVolume(50, 50);
            mPlayer.start();
        }

    }

    public void stopMusic() {
        if (mPlayer != null) {
            mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mPlayer != null) {
            try {
                mPlayer.stop();
                mPlayer.release();
            } finally {
                mPlayer = null;
            }
        }
    }

    public boolean onError(MediaPlayer mp, int what, int extra) {

        Toast.makeText(this, "Music player failed", Toast.LENGTH_SHORT).show();
        if (mPlayer != null) {
            try {
                mPlayer.stop();
                mPlayer.release();
            } finally {
                mPlayer = null;
            }
        }
        return false;
    }
}

Problem: You are calling wrong onError method. 问题:你正在调用错误的onError方法。 You must calling onError of MusicService instead. 你必须在调用onErrorMusicService代替。

Solution: Change your code from 解决方案:更改您的代码

mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

    public boolean onError(MediaPlayer mp, int what, int
            extra) {
        onError(mPlayer, what, extra);
        return true;
    }
});

to

mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

    public boolean onError(MediaPlayer mp, int what, int
            extra) {
        // Calling onError of MusicService instead this onError method.
        MusicService.this.onError(mPlayer, what, extra);
        return true;
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 stack = java.lang.StackOverflowError:堆栈大小8MB - stack=java.lang.StackOverflowError: stack size 8MB 错误java.lang.StackOverflowError:堆栈大小8MB - Error java.lang.StackOverflowError: stack size 8MB java.lang.StackOverflowError:视图中的堆栈大小为8MB - java.lang.StackOverflowError: stack size 8MB in Views java.lang.StackOverflowError:堆栈大小8MB - java.lang.StackOverflowError: stack size 8MB Android Firebase java.lang.StackOverflowError:用户上传图像时堆栈大小 8MB 错误 - Android Firebase java.lang.StackOverflowError: stack size 8MB error when user is uploading an image Android Firebase实时异常java.lang.StackOverflowError:堆栈大小8MB - Android Firebase Realtime Exception java.lang.StackOverflowError: stack size 8MB 值动画制作器中的循环会导致java.lang.StackOverflowError崩溃:堆栈大小8MB - Loop in value animator cause in crash with java.lang.StackOverflowError: stack size 8MB 画画布时出现java.lang.StackOverflowError:堆栈大小8MB - I get java.lang.StackOverflowError: stack size 8MB when i draw my canvas 称为递归onResume活动java.lang.StackOverflowError的方法:堆栈大小8MB - Method called recursive onResume Activity java.lang.StackOverflowError: stack size 8MB StackOverflowError:Android 8.1 ProgressBar上的堆栈大小为8MB - StackOverflowError: stack size 8MB on Android 8.1 of ProgressBar
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM