gpt4 book ai didi

java - 从不同的类调用 TextToSpeech

转载 作者:行者123 更新时间:2023-12-02 02:37:55 27 4
gpt4 key购买 nike

我正在尝试在不同的类中调用 TextToSpeech。这是我的类(class)现在的样子:

//MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private SpeechRecognizer sr;
sr.setRecognitionListener(new Listener());
}


//Listener.java
public class Listener implements RecognitionListener() {
public void onResults(Bundle
MainActivity theMainActivity = new MainActivity();

//the following line always breaks the code:
tts = new TextToSpeech(theMainActivity, new TextToSpeech.OnInitListener() {/*...*/});
}
}

对于上下文,其上下文中的文件是 on GitHub 。 GitHub 上的版本是工作版本,所有内容都在 MainActivity.java 中,但我试图将 Listener 移出到它自己的类 Listener.java.

收到的错误是java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.ContentResolver android.content.Context.getContentResolver()”

现在我对我所尝试过的内容进行详细解释...

我尝试过的

当我尝试用 MainActivity.this 替换 theMainActivity 时,出现错误 MainActivity 不是封闭类。我知道我可以将 Listener 设为静态类(但不会编译),或者可以实例化 new MainActivity().new Listener() (但不会编译)。有人问了完全相同的问题here它本身被标记为重复。所以我的问题是重复的……但是没有给出明确的答案。

我明白我应该以某种方式 solve the NullPointerException 。但是,当我在使用之前记录该值时,它根本不为空。相反,theMainActivityLog.d 中具有值 com.package.name.MainActivity@b76325e。因此,如果它一开始就不为 null,但却引发了 null 错误,那么如何修复它呢?

所以我想这可能是 Android 特有的。毕竟跟android ContentResolver有关系……所以我读了这个question并认为创建一个应用程序 context可以工作,只是我的 MainActivity 扩展了 AppCompactActivity 而不是 Application,所以我无法编写 MainActivity.context。

我知道我错过了一些基本的 Java 理解。我知道应用程序有一个应用程序和 Activity 上下文。我知道问题与在 Listener.java 中获取上下文有关。我还知道我需要以某种方式将上下文引入 Listener.java 中。而且我知道,简单地在 Listener.java 中运行 new MainActivity() 可能是一个坏主意,因为我应该使用最初调用 onResults 的原始 MainActivity Activity 上下文。我能想到的最好的解决方案是以某种方式使上下文成为“全局”,可以被任何类或类似的东西访问......但我不断遇到诸如“它不是静态的”和“不,你”之类的陷阱无法调用 use android.content.Context 因为您没有使用 android.app.Application”。

有什么想法吗?

最佳答案

试试这个

//Listener.java
public class Listener implements RecognitionListener() {
MainActivity instance;
public Listener(MainActivity mainActivity){
this.instance = mainActivity;
}
public void onResults(Bundle
MainActivity theMainActivity = new MainActivity();

//the following line always breaks the code:
tts = new TextToSpeech(instance, new TextToSpeech.OnInitListener() {/*...*/});
}
}
//MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private SpeechRecognizer sr;
sr.setRecognitionListener(new Listener(this));
}

关于java - 从不同的类调用 TextToSpeech,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978089/

27 4 0
文章推荐: java - 大堆上最坏情况垃圾收集持续时间大约是多少
文章推荐: Java 项目到 Groovy - 库不起作用
文章推荐: java - 如何使用 hibernate 在不迭代的情况下将 List 插入数据库?