안녕하세요, 버튼으로 번역을 클릭하면 Google translate API를 사용하여 문자열을 변환하려고합니다. AVD로 실행할 때 문제가되는 것은 스마트 폰으로 배포하려고 할 때입니다. 번역 버튼을 클릭하여 앱 클로스를 클릭하면 오류가 발생합니다.Looper.prepare()를 호출하지 않은 스레드에서 핸들러를 생성 할 수 없습니다 - Google 번역
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 작업을 시도하는 고전적인 결과입니다. –
나는 토스트를 사용하여 코드가 어디에 있는지 확인했다. 다시 정리하고 배포하는 것을 잊지 만 토스트로이 선이 실행될 때까지 "새 AsyncTask() {"및 중지 –
brunocdias