Ошибки при работе с API Yandex Dictionary

277
01 марта 2019, 04:50

Разрабатываю приложение, и собираюсь использовать в нём API Yandex Dictionary. Код с помощью которого получаю транскрипцию слова:

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");
ArrayList<String> information = new ArrayList<>();;
        for (int i = 0; i < yandexAnswer.length(); i++) {
            information.add((String) yandexAnswer.getJSONObject(i).get("ts"));
        }
        transcription = information.get(0).toString();
}

Вызывается функция в методе onClick() при нажатии на кнопку:

text = etInputWords.getText().toString();
getTranslations(text, langEnRu);

Объявление переменной, которая используется в запросе к яндекс словарю для того, чтобы узнать с какого языка на какой переводить:

String langEnRu = "en-ru";

И при использовании выкидывает ошибку:

Process: e.e.translater, PID: 6553
    android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
        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:218)
        at com.example.admin.translator.MainActivity.onClick(MainActivity.java:196)
        at android.view.View.performClick(View.java:5697)
        at android.widget.TextView.performClick(TextView.java:10826)
        at android.view.View$PerformClick.run(View.java:22526)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7224)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

После прочтения статьи: Как починить android.os.NetworkOnMainThreadException Попробовал написать что-то подобное для себя и получилось следующее:

class AsyncRequest extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... strings) {
            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(String s){
            super.onPostExecute(s);
            if (!transcription.equals("")){
                tvOunputTranlsation.setText(transcription + "\n" + translations);
            }
            else {
                tvOunputTranlsation.setText(translations);
            }
        }
    }

и в onClick:

new AsyncRequest().execute("", "", "");

начал выдавать новые ошибки, не совсем понял что не так делаю.

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:211)
        at com.example.admin.translator.MainActivity.access$100(MainActivity.java:33)
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:344)
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:338)
        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:211) 
        at com.example.admin.translator.MainActivity.access$100(MainActivity.java:33) 
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:344) 
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:338) 
        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:211) 
        at com.example.admin.translator.MainActivity.access$100(MainActivity.java:33) 
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:344) 
        at com.example.admin.translator.MainActivity$AsyncRequest.doInBackground(MainActivity.java:338) 
        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) 
READ ALSO
Spring Boot уведомление по времени

Spring Boot уведомление по времени

Приложение состоит из нескольких полей, основные "message", "time", "email"Цель сделать подобие будильника

239
Как реализовать

Как реализовать

Помогите , немогу реализовать Json кодМне нужно взять данные но немогу понять как

246
Окно закрытия приложения

Окно закрытия приложения

Подскажите пожалуйста, как правильно будет реализоватьУ меня имеется окно закрытия приложения (при нажатии на кнопку назад из главного экрана...

203
Какой символ использует DecimalFormat вместо пробела?

Какой символ использует DecimalFormat вместо пробела?

Пытаюсь убрать пробелы из строки, но ничего не происходит

368