Как сделать Jsonobject доступным для чтения в текстовом виде?

Я так новичок в Json. Я пытаюсь понять пример в Интернете. Так что делаю для себя переводчик (яндекс переводчик). Но у меня проблема, я скопировал и вставил исходный код в свой проект. Чтобы сделать Когда я нажал кнопку, текст будет моим текстовым представлением (переводится). Теперь я не могу получить переведенную строку для своего текстового представления. Как я могу ее получить?

Мой 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));








        }

person Berkay Işıkoğlu    schedule 08.04.2018    source источник


Ответы (1)


Вы можете просто получить строку из AsyncTask:

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

Однако этот подход лишает смысла использование AsyncTask, поскольку вы в конечном итоге заблокируете поток пользовательского интерфейса, ожидая результата от .get(). Вместо этого вы должны использовать обратный вызов, например this

person aliaksei    schedule 08.04.2018
comment
Я отредактировал свой вопрос. Вы можете видеть, что сделано. Дает мне исключение. - person Berkay Işıkoğlu; 09.04.2018