I want to send an HTTP request with android (cyberforum took as an example). I read somewhere that it is better to do this through AsyncTask, but nothing comes out.

Code:

package ssamvel.httpexes import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.TextView import kotlinx.android.synthetic.main.activity_main.* import java.io.BufferedReader import java.io.InputStream import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL import java.nio.charset.Charset import javax.xml.datatype.DatatypeConstants.SECONDS import android.os.AsyncTask import ssamvel.httpexes.R.id.textView import java.io.BufferedInputStream class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun hello(view: View) { val task = CatTask() task.execute() } internal inner class CatTask : AsyncTask<Void, Void, Void>() { override fun onPreExecute() { super.onPreExecute() } override fun doInBackground(vararg params: Void): Void? { var urlConnection: HttpURLConnection var url = URL("http://www.cyberforum.ru") urlConnection = url.openConnection() as HttpURLConnection var reader = BufferedReader(InputStreamReader(urlConnection.inputStream)) return null } override fun onPostExecute(result: Void?) { super.onPostExecute(result) } } } 

At asynchronous start the error gets out:

3987-5800 / ssamvel.httpexes E / AndroidRuntime: FATAL EXCEPTION: AsyncTask # 1 Process: ssamvel.httpexes, PID: 3987

With synchronous:

8253-8253 / ssamvel.httpexes E / AndroidRuntime: FATAL EXCEPTION: main Process: ssamvel.httpexes, PID: 8253 java.lang.IllegalStateException: Could not follow the method for android: onClick at android.support.v7.app.AprCath repamptmatshim, you need to be supported and you need to be able to access android: .onClick (AppCompatViewInflater.javaUE89) at android.view.View.performClick (View.java:5610) at android.view.View $ PerformClick.run (View.java:22265) at android.os.Handler.handleCallback ( Handler.java:751) at android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6077 ) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 756) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke (Native Method) at android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCo mpatViewInflater.javaUE84) at android.view.View.performClick (View.java:5610) at android.view.View $ PerformClick.run (View.java:22265) at android.os.Handler.handleCallback (Handler.java : 751) at android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:15 at 4) at android.app.ActivityThread.main (ActivityThread.java:6077) at java .lang.reflect.Method.invoke (Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 756) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1303) at java.net.Inet6AddressImpl.lookupHostByName (Inet6AddressImpl.java, in our app, in the service, in your service, in the use of our service, and you want to make it up. (Inet6AddressImpl.java:74) at java.net.InetAddress.getAllByName (InetAddress.java:752) at com.android.okhttp.internal.Network $ 1.resolveInetAddresses (Network.java:29) at com.android.okhttp.internal .http.RouteS elector.resetNextInetSocketAddress (RouteSelector.java:187) at com.android.okhttp.internal.http.RouteSelector.nextProxy (RouteSelector.java:156) at com.android.okhttp.internal.http.RouteSelectr.extrapt.extlectr.jpl.http.in and.http.RouteSelectr.jpx.RouteSelector.jVoht.extEelectr.jpx.html. 98) at com.android.okhttp.internal.http.HttpEngine.createNextConnection (HttpEngine.java Tuning 45) at com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:328) at com.android.okhh.http .internal.http.HttpEngine.sendRequest (HttpEngine.java:246) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java 5757) at com.android.okhttp.inentra.in.a.era.extine.htpEngine.sendRequest (HttpEngine.java:246) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java penet57) at com.android.ok.tahp.intha, o.htpEnineExineEngine.sendRequest. (HttpURLConnectionImpl.java:405) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:243) at com.android.okhttp.internal.huc.DelegatingHttURURe of Refrands of Ethics, Ethics, Ethics, Sociology and Ecology Sciences (http://www.hava:405) at com.android.okhttp.internal.huc. com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java) at ssamvel.h ttpexes.MainActivity.hello (MainActivity: 38: 38) at java.lang.reflect.Method.invoke (Native Method) at android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java 3.84)))))))). view.View.performClick (View.java:5610) at android.view.View $ PerformClick.run (View.java:22265) at android.os.Handler.handleCallback (Handler.java:751) at android.os.Handler .dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6077) at java.lang.reflect.Method.invoke ( Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:756)

    1 answer 1

    You make a request to the network from the main stream, which is prohibited for a long time by the android. You need to open a connection to the network in the doInBackground method:

     override fun doInBackground(vararg params: HttpURLConnection): Void? { var urlConnection: HttpURLConnection var url = URL("http://www.cyberforum.ru") urlConnection = url.openConnection() as HttpURLConnection var reader = BufferedReader(InputStreamReader(urlConnection.inputStream)) return null } 
    • In hello () I left only the launch of the task. Error is the same: 3253-3281 / ssamvel.httpexes E / AndroidRuntime: FATAL EXCEPTION: AsyncTask # 1 Process: ssamvel.httpexes, PID: 3253 - Gosh Usual
    • @Gosh, the usual, if the code is in your question as it is now, then it is no different from what it was before. Therefore, the error does not change. Do as I have in response - transfer the code to the AsyncTask class method - YuriySPb
    • I did so, transferred the code to the doInBackground - Gosh Obynochny
    • @GoshLaddy, update the code in question - show how exactly you have now - YuriySPb
    • ♦, changed the code. - Gosh House