尝试调用虚拟方法';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吗?可以。我更新了问题。然后,你需要在运行时检查它。这就是例外的原因。因为,这是不允许的