Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试调用虚拟方法';void android.media.MediaRecorder.setAudioSource(int)和#x27;关于空对象引用_Android - Fatal编程技术网

尝试调用虚拟方法';void android.media.MediaRecorder.setAudioSource(int)和#x27;关于空对象引用

尝试调用虚拟方法';void android.media.MediaRecorder.setAudioSource(int)和#x27;关于空对象引用,android,Android,这是我的代码: public class MainActivity extends AppCompatActivity { Button btnrecord; Button btnstop; MediaRecorder recorder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo

这是我的代码:

public class MainActivity extends AppCompatActivity {

Button btnrecord;
Button btnstop;
MediaRecorder recorder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnrecord = findViewById(R.id.btnRecord);
    btnstop = findViewById(R.id.btnStop);

    btnrecord.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            recorder = new MediaRecorder();

            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            recorder.setOutputFile(G.address + "/" + System.currentTimeMillis() + ".amr");

            try {
                recorder.prepare();
                recorder.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    btnstop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            recorder.release();
        }
    });
}
}
当我运行它时,它会生成以下错误:

attempt to invoke virtual method 'void android.media.MediaRecorder.setAudioSource(int)' on a null object reference
对于这一行:

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
我阅读了类似的问题并在网上搜索。关于初始化MediaRecorder,但我已初始化了
记录器
。所以我不知道我的代码的哪个部分是
null
,它给了我这个错误。你能帮帮我吗

更新

我刚刚重新启动Android Studio,之前的错误消失了。现在显示此错误:

10-05 14:21:05.584 10855-10855/? E/Zygote: v2
10-05 14:21:05.584 10855-10855/? E/Zygote: accessInfo : 0
10-05 14:21:22.964 10855-10855/com.pentester.myregm.recorder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pentester.myregm.recorder, PID: 10855
java.lang.RuntimeException: setAudioSource failed.
    at android.media.MediaRecorder._setAudioSource(Native Method)
    at android.media.MediaRecorder.setAudioSource(MediaRecorder.java:488)
    at com.pentester.myregm.recorder.MainActivity$1.onClick(MainActivity.java:31)
    at android.view.View.performClick(View.java:5697)
    at android.widget.TextView.performClick(TextView.java:10826)
    at android.view.View$PerformClick.run(View.java:22526)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7224)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
这条线还是这样:

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

您缺少
清单.权限的运行时权限。请录制音频
,将其添加到清单文件中

<uses-permission android:name="android.permission.RECORD_AUDIO" />


您需要检查该权限运行时并继续操作。

您可以发布整个stacktrace吗?可以。我更新了问题。然后,你需要在运行时检查它。这就是例外的原因。因为,这是不允许的