The application must use the Yandex Dictionary API. Wrote a method to get a translation. It works on Java, began to transfer to Android, and encountered an error.
Process: com.example.admin.translator, PID: 10933 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:309) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?) at java.net.InetAddress.lookupHostByName(InetAddress.java:464) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108) at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295) at com.example.admin.translator.MainActivity.getTranslations(MainActivity.java:352) at com.example.admin.translator.MainActivity.access$300(MainActivity.java:38) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:490) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:479) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) at libcore.io.Posix.android_getaddrinfo(Native Method) at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) at java.net.InetAddress.lookupHostByName(InetAddress.java:451) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108) at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295) at com.example.admin.translator.MainActivity.getTranslations(MainActivity.java:352) at com.example.admin.translator.MainActivity.access$300(MainActivity.java:38) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:490) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:479) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied) at libcore.io.Posix.android_getaddrinfo(Native Method) at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) at java.net.InetAddress.lookupHostByName(InetAddress.java:451) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:220) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:176) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:108) at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:482) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:465) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:447) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:353) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:746) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295) at com.example.admin.translator.MainActivity.getTranslations(MainActivity.java:352) at com.example.admin.translator.MainActivity.access$300(MainActivity.java:38) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:490) at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:479) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Description of the class itself:
class AsyncRequest extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... params) { try { text = etInputWords.getText().toString(); getTranslations(text, langEnRu); } catch (IOException e) { Toast.makeText(getBaseContext(), "Проверьте подключение к интернету!", Toast.LENGTH_SHORT).show(); } catch (JSONException e) { Toast.makeText(getBaseContext(), "Проверьте подключение к интернету!", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); if (!transcription.equals("")){ tvOunputTranlsation.setText(transcription + "\n" + translations); } else { tvOunputTranlsation.setText(translations); } } } Call it in the onClick method:
case R.id.btn_translate: { mPos = mDb.rawQuery("SELECT * FROM EnglishWords WHERE word=\"" + etInputWords.getText()+ "\"", null); if (mPos.moveToFirst()) tvOunputTranlsation.setText(mPos.getString(3 ) + "\n" +mPos.getString(2)); else { text = etInputWords.getText().toString(); AsyncRequest ar = new AsyncRequest(); ar.execute(); } break; } A piece of getTranslations method:
private void getTranslations(String text, String langTranslate) throws IOException, JSONException { Document docc1 = null; String body, answer; String key = "значение"; docc1 = Jsoup.connect("https://dictionary.yandex.net/api/v1/dicservice.json/lookup?key="+ key + "&lang=" + langTranslate + "&text="+text + "&POS_FILTER=0x0008").ignoreContentType(true).get(); body = docc1.body().html(); JSONArray yandexAnswer = new JSONObject(body).getJSONArray("def"); выборка нужных значений } Swears for some reason, the string method getTranslations
docc1 = Jsoup.connect("https://dictionary.yandex.net/api/v1/dicservice.json/lookup?key="+ key + "&lang=" + langTranslate + "&text="+text + "&POS_FILTER=0x0008").ignoreContentType(true).get();
Permission denied (missing INTERNET permission?)- post_zeew