Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我把我的文本到语音的android应用程序放在标签上时,它就停止工作了_Android_Tabs_Text To Speech - Fatal编程技术网

当我把我的文本到语音的android应用程序放在标签上时,它就停止工作了

当我把我的文本到语音的android应用程序放在标签上时,它就停止工作了,android,tabs,text-to-speech,Android,Tabs,Text To Speech,我有一个文本到语音的应用程序,它工作得非常好。问题是我必须把它放在一个标签上,标签工作正常。但是当我把tts放在标签里时,它就不工作了。我已经更改了类名,布局为视图和包,当然除了变量之外,其他一切都是不可更改的。没问题。不幸的是,我真的不得不把它记在账单上。但最糟糕的是它没有显示任何错误。即使试抓也抓不到任何东西。所以我想这是一种逻辑错误,它把我脑子里的所有逻辑都吸干了。Lol.我检查了主活动,在这里调用了这个活动,并且显示,它们是干净的。下面是代码: package leytocz.add.a

我有一个文本到语音的应用程序,它工作得非常好。问题是我必须把它放在一个标签上,标签工作正常。但是当我把tts放在标签里时,它就不工作了。我已经更改了类名,布局为视图和包,当然除了变量之外,其他一切都是不可更改的。没问题。不幸的是,我真的不得不把它记在账单上。但最糟糕的是它没有显示任何错误。即使试抓也抓不到任何东西。所以我想这是一种逻辑错误,它把我脑子里的所有逻辑都吸干了。Lol.我检查了主活动,在这里调用了这个活动,并且显示,它们是干净的。下面是代码:

package leytocz.add.andriod;

import java.util.Locale;
import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class nptab extends Activity implements TextToSpeech.OnInitListener{

    private TextToSpeech tts;
    private Button btnSpeak;
    private EditText txtText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nptab);
        tts=new TextToSpeech(this,this);
        btnSpeak=(Button) findViewById(R.id.btnSpeak);
        txtText=(EditText) findViewById(R.id.txtText);

        btnSpeak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                speakOut();
            }
        });
    }
@Override
public void onInit(int status) {
    if (status==TextToSpeech.SUCCESS) {
        int result=tts.setLanguage(Locale.US);
        if (result==TextToSpeech.LANG_MISSING_DATA
                || result==TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS","This Language is not supported");
        } else {
            btnSpeak.setEnabled(true);
            speakOut();
        }
    } else {
        Log.e("TTS", "Initialization Failed!");
    }
}
private void speakOut() {
    String text=txtText.getText().toString();
    tts.speak(text,TextToSpeech.QUEUE_FLUSH, null);
}
}

static TextToSpeech mTTS;
onCreate():

onActivityResult:

    if (requestCode == MY_DATA_CHECK_CODE && !mTTSInitialized) 
    {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
        {
            // success, create the TTS instance
            mTTS = new TextToSpeech(this, (OnInitListener) this);
            if (mTTS!=null)
                mTTSInitialized = true;
        } 
        else 
        {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }
吸气剂:

public static TextToSpeech getmTTS() {
    return mTTS;
}

所有这些都放在TabHost本身中。

不需要在活动中编写这么多代码,只需单独编写这一行,我也遇到了这个问题,最后我得到了这个解决方案

换这个

tts=new TextToSpeech(this,this); --this is your code
你这样改变

tts=new TextToSpeech(getParent(),this);

这对我来说非常有效

没有人知道答案吗(我做了类似的事情,让我的TabHost创建了tts,并为其他活动使用了一个静态get方法来使用这个tts对象。不知道这是否是最佳实践,但工作完美无瑕。先生,请纠正我,如果我错了,您的tts声明在TabHost中,而不是在活动itslef中?如果它解决了您的问题,您能否将答案标记为Acceptd、 请?等等,你能先解释一下吗?我不太懂你的代码。这和我如何称呼tts相去甚远。我不太熟悉。请解释一下。谢谢。你创建了一个TextToSpeech类型的类变量,它是包含TabHost的类的一员。通常这些变量放在你的类声明和d activities onCreate()方法。然后在onCreate()中创建一个意图来检查手机上TTS的可用性。在
onActivityResult()中
method您最终初始化了在第一步中声明的TTS变量。为了在其他活动中使用,您在包含
TabHost
的类中创建了一个getter方法,该类只返回TTS变量。在
Activity
中要使用TTS的地方,您调用
TabHost
的getter,例如
TabHostClass。getmTTS().speak(“口语文本”,TextToSpeech.QUEUE_FLUSH,null);
您是否能够实现与制表符无关的TTS?
tts=new TextToSpeech(getParent(),this);