[英]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. 你必须在调用onError
的MusicService
代替。
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.