0

I am so beginner about Json. I am trying to understand example on the internet. So that I am doing a translater for myself(Yandex translater). But I have problem I copied and pasted source cod to my project. To making When I clicked my button , Text will be my textview(being translated) Now I cannot get translated string for my textview.How can I get it ?

My TranslatorBackgroundTask AsyncTask (it is not inner class) :

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

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








        }

1 Answers1

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

aliaksei
  • 714
  • 1
  • 9
  • 23