1

我正在尝试制作一个将使用一些 API 进行翻译的 Android 应用程序(现在我使用 Microsoft API - microsoft-translator-java-api-0.6.2-jar-with-dependencies.jar )

我已经为单个字符串完成了此操作,但我想翻译一些 pdf 文件。有人知道我怎样才能将 PDF 发送给这个翻译并把它翻译回来?

public class FirstFrag extends MainNavigation.SectionFrag {

private Button translate;

String translatedText;

public FirstFrag(){
    super();
}
public static FirstFrag newInstance(Context c, int section){
    FirstFrag ret = new FirstFrag();
    ret.setSection(section);
    return ret;
}

@Override
public void afterCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {

    super.afterCreateView(inflater, container, savedInstanceState);
    setContentView(R.layout.first_frag_layout);

    translate = (Button) findViewById(R.id.btnProgressBar);
    translate.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            translate.setEnabled(false);
                new TranslateFromBing().execute();

        }
    });
}

@Override
protected void onRetryClicked() {}

// Async Task Class
class TranslateFromBing extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }


    @Override
    protected String doInBackground(String... f_url) {

    Translate.setClientId("MY CLIENT ID");
    Translate.setClientSecret("MY CLIENT SECRET");

    translatedText = null;
    try {
        translatedText = Translate.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);
    } catch (Exception e) {
        e.printStackTrace();
    }

        return null;
    }


    protected void onProgressUpdate(String... progress) {

    }

    @Override
    protected void onPostExecute(String file_url) {
        Toast.makeText(getActivity().getApplicationContext(), "Translation complete", Toast.LENGTH_LONG).show();

        TextView translated = (TextView) findViewById(R.id.translatedText);
        if(translatedText != null) {
            translated.setText(translatedText);
        }
        else {
            translated.setText("ERROR HERE");
        }
    }
}
4

1 回答 1

0

您正在调用execute在 UI 线程上调用的内部方法。我不知道这个 API,但它很可能确实与服务器通信,如果它立即返回数据 - 而不是通过某种回调,那么它可能正在做 HTTP 通信。

这在 android 下是不允许的,你应该在 AsyncTask 中调用这个 api。

另一件事是,您应该分析 logcat - 它应该为您提供有关问题所在的额外提示。你在 try/catch 中调用的事实execute可能是因为你得到了android.os.NetworkOnMainThreadException.

于 2015-07-30T10:40:11.290 回答