Android MediaPlayer:从字符串变量引用时出错(1,-2147483648)
Android MediaPlayer: error (1, -2147483648) when referencing from string variable
我正在使用 jsoup 抓取一些音频文件源 URLs 并将它们存储在一个字符串中。如果该字符串稍后不为空,则会创建一个带有 onClick 侦听器的按钮来播放该文件。这行得通,但在用不同的页面进行测试时它已经坏了。如果我将数据源直接设置为将被抓取的 URL,它会起作用,所以这不是解码器问题。这是问题发生的地方。
if (play1 != null) {
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.buttonPanel);
final Button btn = new Button(MainActivity.this);
btn.setText("Play");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mp.reset();
mp.setDataSource(play1);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
try{
linearLayout.addView(
btn,
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)
);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
如果您想重现问题,我已经包含了重现所需的项目的主要功能。
Here 是与关键变量一起工作的代码示例,这里重点关注数据源字符串。
并且 here 是完全相同代码的示例,唯一的变化是对数据源字符串的更改,而这个代码不起作用。
如果要运行检查此代码,您需要导入 Jsoup 库并添加 my checker class。
替换
mp.setDataSource(play1);
作者:
mp.setDataSource(play1.replaceAll(" ", "%20"));
我正在使用 jsoup 抓取一些音频文件源 URLs 并将它们存储在一个字符串中。如果该字符串稍后不为空,则会创建一个带有 onClick 侦听器的按钮来播放该文件。这行得通,但在用不同的页面进行测试时它已经坏了。如果我将数据源直接设置为将被抓取的 URL,它会起作用,所以这不是解码器问题。这是问题发生的地方。
if (play1 != null) {
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.buttonPanel);
final Button btn = new Button(MainActivity.this);
btn.setText("Play");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mp.reset();
mp.setDataSource(play1);
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
try{
linearLayout.addView(
btn,
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)
);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
如果您想重现问题,我已经包含了重现所需的项目的主要功能。
Here 是与关键变量一起工作的代码示例,这里重点关注数据源字符串。
并且 here 是完全相同代码的示例,唯一的变化是对数据源字符串的更改,而这个代码不起作用。
如果要运行检查此代码,您需要导入 Jsoup 库并添加 my checker class。
替换
mp.setDataSource(play1);
作者:
mp.setDataSource(play1.replaceAll(" ", "%20"));