无法更改预定义的字符串值

时间:2019-07-12 15:42:27

标签: java android

我正在构建一个录音机应用程序。要存储创建的音频文件,我使用此字符串为它们命名来创建它们

`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;
            }

1 个答案:

答案 0 :(得分:0)

这应该不言而喻,但是您是否尝试过在该行上设置断点?

inputName = String.valueOf(userInput.getText());

您需要验证该代码是否被调用。在执行该语句之前和之后,您应该注意inputName的值。就像@a_local_nobody所说的那样,您的语法是错误的,无论如何都不会给您想要的东西,但是,它不应使inputName保持不变(除非String.valueOf抛出了您没有捕获的错误,这是可能的)。设置断点并逐步执行代码将确切显示正在发生的事情。这是您的语法应为:

inputName = userInput.getText().toString();

您还需要检查EditText userInput实际上是否已实例化,并且不是空值。