Im кодирует небольшое приложение для Android, которое должно получать данные с jpm-сервера npm. Это исключает. Я расширил класс подключения с помощью AsyncTask и выполнил код в «doInBackground», но он по-прежнему вызывает исключение. Пожалуйста помогите.GET данные от NPM json-server throws NetworkOnMainThreadException
Вот код:
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Network extends AsyncTask <String, Void, String> {
public String urlString = ("http://localhost:3000");
@Override
protected String doInBackground(String... params) {
StringBuffer chaine = new StringBuffer("");
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("User-Agnet", "");
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = rd.readLine()) != null) {
chaine.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} catch (UnsupportedOperationException e) {
e.printStackTrace();
}
return chaine.toString();
}
}
LogCat говорит:
android.os.NetworkOnMainThreadException в android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1147) в java.net.InetAddress.lookupHostByName (InetAddress.java:418) at java.net.InetAddress.getAllByNameImpl (InetAddress.java:252) at java.net.InetAddress.getAllByName (InetAddress.java:215) в com.android.okhttp.HostResolver $ 1.getAllByName (HostResolver.java:29) в com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:232) в com.android.okhttp.internal .http.RouteSelector.next (RouteSelector.java:124) at com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:361) at com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:289) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:373) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:106) на smoca.ch.kreagen.Network.doInBackground (Network.java:25) на smoca.ch.kreagen. BackendMockup.getData (BackendMockup.java:11) на smoca.ch.kreagen.FillRealm.initRealm (FillRealm.java:43) на smoca.ch.kreagen.Fragments.HomeFragment.onCreateView (HomeFragment.java:42) at android.support.v4.app.Fragment.performCreateView (Fragment.java:1789) at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:955) at android.support.v4.app.FragmentManagerImpl. moveToState (FragmentManager.java:1138) на android.support.v4.app.BackStackRecord.run (BackStackRecord.java:740) на android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1501) на android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:458) на android.os.Handl er.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:145) на android.app.ActivityThread. main (ActivityThread.java:5832) по адресу java.lang.reflect.Method.invoke (собственный метод) по адресу java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1399) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1194)
Я знаю, что проблема в том, когда «connection.connect ();» получает вызов, потому что он должен находиться в главной теме. Но не следует. правильно?
Привет Джон
Вам не нужно называть 'connection.connect()' удалить его. – Breavyn
как вы используете класс 'Network'? – LordRaydenMK
Пожалуйста, не вызывайте напрямую doInBackground – Blackbelt