こんにちは私はボタンで翻訳をクリックするとgoogle translate apiを使用して文字列を翻訳しようとしています。私はAVDとして動作しても正常に動作しますが、問題はスマートフォンで展開しようとするときです。翻訳ボタンをクリックするとアプリケーションのクローズが発生し、エラーが発生します。Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません - Google Translate
Bundle bundle = getIntent().getExtras();
String word = "";
if(bundle.containsKey("Name")){
word = (String) bundle.getString("Name");
txtTarget.setText(word);
//envia para o translate api para traduzir a palavra pro portugues
}
final String finalWord = word;
btnResultado.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final Handler textViewHandler = new Handler();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Translate translate = TranslateOptions.newBuilder().setApiKey(API_KEY).build().getService();
final Translation translation = translate.translate(finalWord, Translate.TranslateOption.targetLanguage("pt"));
textViewHandler.post(new Runnable() {
@Override
public void run() {
txtSource.setText(translation.getTranslatedText());
}
});
return null;
}
}.execute();
}
});
エラー:
Process: com.google.sample.cloudvision, PID: 8874 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:309) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.(Handler.java:200) at android.os.Handler.(Handler.java:114) at android.widget.Toast$TN.(Toast.java:345) at android.widget.Toast.(Toast.java:101) at android.widget.Toast.makeText(Toast.java:259) at com.google.sample.cloudvision.ActSegundaTela$1$1$1.doInBackground(ActSegundaTela.java:82) at com.google.sample.cloudvision.ActSegundaTela$1$1$1.doInBackground(ActSegundaTela.java:79) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)
これをさらにデバッグする必要はありません。これは、別のスレッドでUI操作を実行しようとする古典的な結果です。 –
私はToastを使って自分のコードがどこに行くかチェックしましたが、もう一度きれいにしてデプロイするのを忘れましたが、トーストで私はこの行まで実行することをckeckedしました "新しいAsyncTask(){" –
brunocdias