我正在构建一个录音机应用程序。要存储创建的音频文件,我使用此字符串为它们命名来创建它们
`public String inputName = "recorded_audio";`
这是默认的音频剪辑名称,除非用户使用nameBtn
后来我使用另一个String作为文件的最终名称
`mediaFileName += "/Files/Recordings/" + inputName + ".mp3";`
我希望为用户提供命名文件的选项,而不是使用“ recorded_audio.mp3”,因此我添加了一个按钮,该按钮弹出一个对话框供用户插入值。按下OK后,字符串inputName
的值应由用户输入替换,因此,下次发生记录时,文件将以用户输入的名称保存。问题是:无论用户输入什么内容,文件总是以字符串的初始值保存,就好像用户从未输入值一样。
public String inputName = "recorded_audio";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio_recorder);
recordBtn = findViewById(R.id.recordBtn);
nameBtn = findViewById(R.id.nameBtn);
对话框弹出窗口:
nameBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = (LayoutInflater.from(AudioRecorder.this)).inflate(R.layout.audio_name_input, null);
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AudioRecorder.this);
alertBuilder.setView(view);
final EditText userInput = view.findViewById(R.id.userInput);
alertBuilder.setCancelable(true).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
inputName = String.valueOf(userInput.getText());
}
});
Dialog dialog = alertBuilder.create();
dialog.show();
}
});
保存文件:
String folder_main = "Files/Recordings"; //Creates folder path
File file = new File(Environment.getExternalStorageDirectory(), folder_main);
file.mkdirs();
mediaFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mediaFileName += "/Files/Recordings/" + inputName + ".mp3";
记录按钮:
recordBtn.setOnTouchListener(new View.OnTouchListener() {
switch (motionEvent.getAction()) {
//User stops touching the button
case MotionEvent.ACTION_UP:
if (isRecording) {
stopRecording();
File file = new File(mediaFileName);
int file_size = Integer.parseInt(String.valueOf(file.length()));
if(file_size >= 4096) {
finish(); //Finishes activity.
startActivity(getIntent()); //Restarts activity in order to reset chronometer
startActivity(new Intent(AudioRecorder.this, AudioPlayer.class)); //Once recording is complete loads AudioPlayer activity
}
isRecording = false;
}
break;
//User touches the button
case MotionEvent.ACTION_DOWN:
//Recording Proccess
isRecording = true;
}
break;
}
return false;
}
答案 0 :(得分:0)
这应该不言而喻,但是您是否尝试过在该行上设置断点?
inputName = String.valueOf(userInput.getText());
您需要验证该代码是否被调用。在执行该语句之前和之后,您应该注意inputName的值。就像@a_local_nobody所说的那样,您的语法是错误的,无论如何都不会给您想要的东西,但是,它不应使inputName保持不变(除非String.valueOf抛出了您没有捕获的错误,这是可能的)。设置断点并逐步执行代码将确切显示正在发生的事情。这是您的语法应为:
inputName = userInput.getText().toString();
您还需要检查EditText userInput实际上是否已实例化,并且不是空值。