为了账号安全,请及时绑定邮箱和手机立即绑定

从 Android 中的 Set<Locale> 获取对象数组的问题

从 Android 中的 Set<Locale> 获取对象数组的问题

茅侃侃 2021-12-10 17:11:06
你看到这段代码有什么问题吗?函数执行时出现以下错误:java.lang.NullPointerException: Attempt to invoke interface method java.lang.Object[] java.util.Set.toArray()on a null object reference。我在 Android 7.0 中运行它。import android.speech.tts.TextToSpeech;import android.speech.tts.TextToSpeech.OnInitListener;import java.util.Locale;import java.util.Set;import java.util.Arrays;import android.content.Context;public static String GetLanguages(Object objcon) {    Context context = (Context) objcon;    TextToSpeech tts;    tts = new TextToSpeech(context, new OnInitListener(){        @Override        public void onInit(int status) {        };    });    Set<Locale> loc = tts.getAvailableLanguages();    Object[] objloc = loc.toArray();    return Arrays.toString(objloc);};
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

你得到空值,因为TextToSpeech需要时间来初始化。这就是为什么你必须OnInitListener在初始化期间提供实现。


tts = new TextToSpeech(context, new TextToSpeech.OnInitListener(){

        @Override

        public void onInit(int status) {

            // Now you can use tts

            Set<Locale> loc = tts.getAvailableLanguages();

            Object[] objloc = loc.toArray();


        };

    });

该方法需要使用 TextToSpeech 作为类变量,因此您需要某种回调,以从GetLanguages方法中获取结果。


查看完整回答
反对 回复 2021-12-10
?
Helenr

TA贡献1780条经验 获得超3个赞

改用这个:


Locale[] locales = Locale.getAvailableLocales();

List<Locale> localeList = new ArrayList<Locale>();

for (Locale locale : locales) {

    int res = tts.isLanguageAvailable(locale);

    if (res == TextToSpeech.LANG_COUNTRY_AVAILABLE) {

        localeList.add(locale);

    }

}


return Arrays.toString(localeList);


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信