gpt4 book ai didi

java - 从子类访问方法时出错

转载 作者:行者123 更新时间:2023-11-29 18:58:31 31 4
gpt4 key购买 nike

我是 android 开发的新手,我想制作一个录音机,当我想从我的主要 Activity 访问开始录音的方法时,它总是会出错。下面是我的代码。我希望你能帮助我:

这是主要 Activity :

public class MainActivity extends AppCompatActivity {

Boolean isRecording = false;
Record record;

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

record = new Record();
}

public void recordAudio(View view){
if(!isRecording)
{
isRecording = true;
record.startRecording();
}

else{
isRecording = false;
record.stopRecording();
}
}

下面是子类:

public class Record extends MainActivity {

public void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, getBufferSize());

int i = recorder.getState();
if (i == 1)
recorder.startRecording();

isRecording = true;

recordingThread = new Thread(new Runnable() {

@Override
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");

recordingThread.start();
buttonRecord.setText(R.string.button_stop_record);

}

感谢您的帮助!

具体错误代码如下:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com, PID: 31778
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:6199) 
at android.widget.TextView.performClick(TextView.java:11090) 
at android.view.View$PerformClick.run(View.java:23647) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6682) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
Caused by: java.lang.IllegalArgumentException: Invalid audio buffer size.
at android.media.AudioRecord.audioBuffSizeCheck(AudioRecord.java:751)
at android.media.AudioRecord.<init>(AudioRecord.java:385)
at android.media.AudioRecord.<init>(AudioRecord.java:289)
at com.Record.startRecording(Record.java:63)
at com.MainActivity.recordAudio(MainActivity.java:35)
at java.lang.reflect.Method.invoke(Native Method) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:6199) 
at android.widget.TextView.performClick(TextView.java:11090) 
at android.view.View$PerformClick.run(View.java:23647) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6682) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

最佳答案

在 Android 中,Activity 通常由用户代码启动,但对象创建不是用户的责任,而是由 Android 框架来完成。

您的案例有 Record extends MainActivity 并且 MainActivity 是一个 Activity 使得 Record 也是一个 Activity。因此,您需要启动它,使其成为 list 文件中的启动器主要 Activity 或使用 startActivity()(或 startActivityForResult())。

代码 record = new Record(); 在这里,您自己在父类 MainActivity 中创建了 Record 的实例。从 Android 编程和 Java 面向对象的角度来看,这都不是一个好主意。 (因此你可以但不应该选择这样做)

引用另一个帖子的一个答案 https://stackoverflow.com/a/14956056/504133

我建议您使用两个或三个 Activity 制作简单的 Android 应用程序,每个 Activity 都有简单的 UI 布局。您可以在那里学习,然后将概念应用于更复杂的应用程序,例如 AudioRecorder。

关于java - 从子类访问方法时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464971/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com