谷歌翻译/Android错误

谷歌翻译/Android错误,android,google-translate,networkonmainthread,Android,Google Translate,Networkonmainthread,我刚开始使用GoogleTranslationAPI客户端库,在AS 3.0.1中使用SDK 26/min 22,如下所示。在获得密钥并使用gradle应用程序文件安装库之后,我正在使用他们建议的代码 package com.example.xxx.simptrans; import android.app.Activity; import android.content.Context; import android.os.Bundle; // Imports the Google Clo

我刚开始使用GoogleTranslationAPI客户端库,在AS 3.0.1中使用SDK 26/min 22,如下所示。在获得密钥并使用gradle应用程序文件安装库之后,我正在使用他们建议的代码

package com.example.xxx.simptrans;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;

// Imports the Google Cloud client library
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Context context = getApplicationContext();

        Translate translate = TranslateOptions.getDefaultInstance().getService();

        // The text to translate
        String text = "Hello, world!";

        // Translates some text into Russian
        Translation translation =
                translate.translate(
                        text,
                        TranslateOption.sourceLanguage("en"),
                        TranslateOption.targetLanguage("ru"));

        System.out.printf("Text: %s%n", text);
        System.out.printf("Translation: %s%n", translation.getTranslatedText());
    }
}
当我运行它时,我得到一个网络线程异常:

Caused by: android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)......
我已经包括了我的AndroidManifest.xml-

<uses-permission android:name="android.permission.INTERNET" />


是什么导致了这个错误?谢谢。

尝试创建一个AsyncTask类,然后使用要翻译的文本执行它。 因为问题可能是您正试图通过主线程访问网络

class Translate extends AsyncTask<String, Void, String> {


    protected String doInBackground(String... params) {

         String text = params[0]; //text to translate
         Translate translate = TranslateOptions.getDefaultInstance().getService();
         Translation translation =
                translate.translate(
                    text,
                    TranslateOption.sourceLanguage("en"),
                    TranslateOption.targetLanguage("ru"));



         return translation.getTranslatedText();
    }

    //this method will run after doInBackground execution
    protected void onPostExecute(String result) {
     System.out.printf("Translation: %s%n", result);
    }


}

但是,这是有效的,我现在面临一个有效的API密钥问题。我有一个致命的异常,原因是“请求缺少有效的API密钥”。我在GCP中创建了一个项目,下载了JSON文件,并设置了一个指向它的环境变量。我还需要另一个认证步骤吗?
Translate translate = new Translate();
String text = "Hello, world!";
System.out.printf("Text: %s%n", text);
translate.execute(text );