지난 3 주 동안 Android 프로그래밍을 배우고 있으며 EditText를 사용하여 사용자의 결과를 가져와 Microsoft를 사용하여 선택한 언어로 번역하는 앱을 개발하고 있습니다. Translate API.AsyncTask에서 PopupMenu 항목 호출 방법
내가 직면 한 문제는 사용자가 메뉴에서 언어를 선택하고 EditText 상자에 주어진 텍스트를 번역 할 수있게하는 응용 프로그램을 얻을 수 없다는 것입니다. 이 문제는 AsyncTask에 익숙하지 않기 때문에 사용하지 않고 응용 프로그램을 실행하려고했지만 e 예외가 반환됩니다. 다음 코드
class MyAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override
protected Boolean doInBackground(Void... arg0) {
Translate.setClientId("MicrosoftTranslatorJavaAPI");
Translate.setClientSecret(secret_key);
try {
translatedText = Translate.execute(et.getText().toString(), Language.ENGLISH, Language.FRENCH);
} catch(Exception e) {
translatedText = e.toString();
}
return true;
}
}
어떤 도움이 여기에
감사 전체 코드 인 것 같이 내가 하나 개의 기본 언어를 선택할 때 그것은 그러나 작동 않습니다.자바 파일
public class MicrosoftTranslatorAndroidTestActivity extends Activity {
/** Called when the activity is first created. */
TextView text;
String translatedText;
EditText et;
PopupMenu popupMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et=(EditText) findViewById(R.id.editText1);
Button b=(Button) findViewById(R.id.button1);
text = (TextView) findViewById(R.id.tv1);
text.setText("<This text should change after translation has occurred in AsyncTask>");
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
popupMenu = new PopupMenu(MicrosoftTranslatorAndroidTestActivity.this, v);
popupMenu.getMenuInflater().inflate(R.menu.popmenu, popupMenu.getMenu());
new MyAsyncTask() {
protected void onPostExecute(Boolean result) {
text.setText(translatedText);
}
}.execute();
popupMenu.show();
}
});
}
class MyAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override
protected Boolean doInBackground(Void... arg0) {
Translate.setClientId("MicrosoftTranslatorJavaAPI");
Translate.setClientSecret(secret_key);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()){
case R.id.ar:
try {
translatedText = Translate.execute(et.getText().toString(), Language.ENGLISH, Language.ARABIC);
} catch(Exception e) {
translatedText = e.toString();
}
break;
case R.id.fr:
try {
translatedText = Translate.execute(et.getText().toString(), Language.ENGLISH, Language.FRENCH);
} catch(Exception e) {
translatedText = e.toString();
}
break;
case R.id.sp:
try {
translatedText = Translate.execute(et.getText().toString(), Language.ENGLISH, Language.SPANISH);
} catch(Exception e) {
translatedText = e.toString();
}
break;
default:
break;
}
return true;
}
});
return true;
}
}
이'는 전자 exception'을 반환 호출합니다. 예외가 무엇인지 이해합니까? 그렇지 않으면 말하십시오. BTW, 명백한 이유로, 당신은 당신의 열쇠를 게시해서는 안됩니다. 나는 그것을 제거했습니다. – Simon
@Simon은 번역 된 결과를 반환하지 않는다고 말했습니다. translatedText 변수는 "java.lang.exception. [번역을 불러오는 중 오류가 발생했습니다 : Microsoft-translator-api] – aasg
와 같은 것을 반환합니다. logcat에서 스택 추적을 게시하십시오. – Simon