Search code examples
javaandroidibm-cloudspinnerlanguage-translation

How to pass spinner value to the target language in IBM api?


I have a spinner consisting of the languages in the IBM library. I want the user to select a language and translate the text into the selected language. I got the value from spinner but I don't know how to pass the value to the target language. Please help.

`enter code here`Spinner s = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, languages);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s.setAdapter(adapter);
    text = s.getSelectedItem().toString(); // value from spinner



    new Hey().execute();
}


    class Hey extends AsyncTask<Void, Void, String> {
    String text;


        protected void onPreExecute() {
            super.onPreExecute();

        }


        @Override
        protected String doInBackground(Void... voids) {

            IamAuthenticator authenticator = new IamAuthenticator("nAh_Z_0X2AS1Vun2MI3UR3lYNRivFRkWaNsZyFwELMul"); //key
            LanguageTranslator languageTranslator = new LanguageTranslator("2018-05-01", authenticator);
            languageTranslator.setServiceUrl("https://api.eu-gb.language-translator.watson.cloud.ibm.com/instances/83f66689-1c94-4a9b-b595-e2d776f10ded"); //url

            TranslateOptions translateOptions = new TranslateOptions.Builder()
                    .addText("Hello")
                    .source(Language.ENGLISH)
                    .target(Language.SPANISH) // need to get user to select the target language from the spinner option
                    .build();

            TranslationResult result = languageTranslator.translate(translateOptions) //translation happens
                    .execute().getResult();

            String som = result.toString();
            System.out.println(som);


            return som;
        }

Solution

  • First You need to understand how could you pass the value as a parameter to the AsyncTask. So after taking the value from spinner pass it to AsyncTask parameter.

    Your code will look like this:

    text = s.getSelectedItem().toString(); // value from spinner
    new Hey().execute(text);
    

    Now in the AsyncTask you will retrieve the passed parameter:

     class Hey extends AsyncTask<Void, Void, String> {
        String text;
    
            @Override
            protected String doInBackground(Void... voids) {
    
           String language = (String) params[0]; //can use it further
          TranslateOptions translateOptions = new TranslateOptions.Builder()
                    .addText("Hello")
                    .source(Language.ENGLISH)
                    .target(language) // Do check the input format for this and do required conversion 
                    .build();
        }
    }