Разрабатываю приложение, и собираюсь использовать в нём 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)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости