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);
    }

私の MainActivity :

  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

AsyncTask から単純に文字列を取得できます。

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

ただし、このアプローチでは、 からの結果を待つときに UI スレッドをブロックすることになるため、AsyncTask を使用する点が無効になります.get()。代わりに、このようなコールバックを使用する必要があります

于 2018-04-08T22:13:12.317 に答える