0

我对 Json 很陌生。我试图理解互联网上的例子。所以我正在为自己做一个翻译(Yandex 翻译)。但是我有问题我将源代码复制并粘贴到我的项目中。当我点击我的按钮时,文本将是我的文本视图(正在翻译)现在我无法为我的文本视图获取翻译字符串。我怎样才能得到它?

我的 TranslatorBackgroundTask AsyncTask (它不是内部类):

 TranslatorBackgroundTask(Context ctx){
        this.ctx = ctx;
    }

    @Override
    protected String doInBackground(String... params) {
        //String variables
        String textToBeTranslated = params[0];
        String languagePair = params[1];

        String jsonString;

        try {
            //Set up the translation call URL
            String yandexKey = 

            String yandexUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=" + yandexKey
                    + "&text=" + textToBeTranslated + "&lang=" + languagePair;

            URL yandexTranslateURL = new URL(yandexUrl);


            //Set Http Conncection, Input Stream, and Buffered Reader
            HttpURLConnection httpJsonConnection = (HttpURLConnection) yandexTranslateURL.openConnection();
            InputStream inputStream = httpJsonConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            //Set string builder and insert retrieved JSON result into it
            StringBuilder jsonStringBuilder = new StringBuilder();
            while ((jsonString = bufferedReader.readLine()) != null) {
                jsonStringBuilder.append(jsonString + "\n");
            }

            //Close and disconnect
            bufferedReader.close();
            inputStream.close();
            httpJsonConnection.disconnect();

            //Making result human readable
            String resultString = jsonStringBuilder.toString().trim();
            //Getting the characters between [ and ]
            resultString = resultString.substring(resultString.indexOf('[')+1);
            resultString = resultString.substring(0,resultString.indexOf("]"));
            //Getting the characters between " and "
            resultString = resultString.substring(resultString.indexOf("\"")+1);
            resultString = resultString.substring(0,resultString.indexOf("\""));

            Log.d("Translation Result:", resultString);

            return jsonStringBuilder.toString().trim() ;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

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

    @Override
    protected void onPostExecute(String result) {

        }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

我的主要活动:

  cevir_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          String yazı_string =  yazı_EditText.getText().toString();
         //   trans(yazı_string,language);
            String languagePair = "en-fr";

            Translate(yazı_string,languagePair);




        }


    });


        private void Translate(String textToBeTranslated, String languagePair) {
            TranslatorBackgroundTask translatorBackgroundTask= new TranslatorBackgroundTask(context);
            AsyncTask<String, Void, String> translationResult = translatorBackgroundTask.execute(textToBeTranslated,languagePair);

try {
            String translationResults = translatorBackgroundTask.execute(textToBeTranslated, languagePair).get();
            cevirilmis_tTextView.setText(translationResults);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

            Log.d("Translation Result", String.valueOf(translationResult));








        }
4

1 回答 1

0

You could simply get the string from the AsyncTask:

String translationResult = translatorBackgroundTask.execute(textToBeTranslated, languagePair).get();

However this approach defeats the point of using an AsyncTask as you will end up blocking the UI thread as you wait for the result from .get(). Instead you should use a callback like this

于 2018-04-08T22:13:12.317 回答