0

I'm trying to make an app in which I can able to translate a string from clipboard and shows it as Toast but it giving me Network in main thred Exception. Here is my code


@Override
protected void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    final ClipboardManager cb = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    cb.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener(){

            @Override
            public void onPrimaryClipChanged()
            {
                // TODO: Implement this method
                ClipData clipdata = cb.getPrimaryClip();
                ClipData.Item item = clipdata.getItemAt(0);
                if(item.getText()!=null)
                {
                    //String text = item.getText().toString();
                    //Toast.makeText(getApplicationContext(), "Copied "+item.getText().toString(), Toast.LENGTH_LONG).show();
                    Translator translate = Translator.getInstance();
                    String demo = translate.translate(item.getText().toString(), Language.ENGLISH, Language.HINDI);
                    Toast.makeText(getApplicationContext(), "Translation: " + demo, Toast.LENGTH_LONG).show();
                }
            }
        });
}
shubham kumbhar
  • 47
  • 1
  • 2
  • 10

1 Answers1

0

The Library you are using is making a web service call. The following code is responsible for the service call.

Translator translate = Translator.getInstance();
translate.translate(strings[0], Language.ENGLISH, Language.HINDI);

You can do this in a separate thread like AsyncTask. Try the following code hope this will help.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final String temp;

    final ClipboardManager cb = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    cb.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener(){

        @Override
        public void onPrimaryClipChanged()
        {
            // TODO: Implement this method
            ClipData clipdata = cb.getPrimaryClip();
            ClipData.Item item = clipdata.getItemAt(0);
            if (item != null)
            {
                String text = item.getText().toString();
                // I have used the async task here for the network call.
                new Asynch().execute(text);

            }
        }
    });
}

class Asynch extends AsyncTask<String, Void, String> {

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

    @Override
    protected String doInBackground(String... strings) {
        Translator translate = Translator.getInstance();
        return translate.translate(strings[0], Language.ENGLISH, Language.HINDI);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Toast.makeText(getApplicationContext(), "Translation: " + s, Toast.LENGTH_LONG).show();
    }

}
  • Thanks, your code working but i can't see the translated word in hindi font as a toast, how can i achieve that? – shubham kumbhar Jan 04 '18 at 10:32
  • The library you are using is not working properly. It is throwing FileNotFoundException. You can try other translation libraries for your functionality. – Shubham Dani Jan 04 '18 at 11:12