首页 > 解决方案 > 从 Set 获取对象数组的问题在安卓中

问题描述

你觉得这段代码有什么问题吗?函数执行时出现以下错误java.lang.NullPointerException:尝试java.lang.Object[] java.util.Set.toArray()在空对象引用上调用接口方法。我在 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);

};

标签: javaandroidtext-to-speech

解决方案


你得到空值,因为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方法中获取结果。


推荐阅读