# Download Web-Content, AsyncTask



## Tintenfisch (25. Jul 2021)

Hey, folgender Fehler erscheint beim Versuch Inhalte aus dem Internet zu laden. Den Code habe ich wie hier geschrieben verwendet und die Internet-Permission ist gesetzt. Das Programm startet soweit auch, nur fliegt in der doInBackground Methode die Exception. Hat wer von euch noch ne Idee woran das liegen könnte?

[CODE lang="java" title="MainActivity"]package com.example.downloadwebcontent2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            DownloadTask task = new DownloadTask();
            String result = null;
            try {
                //sending utl to class method doInBackground()
                result = task.execute("https://www.google.de").get();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            Log.i("Result",result);

        }

        //type of vatiable which we will send to class
        public class DownloadTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... urls) {
                String result="";
                URL url;
                HttpURLConnection urlConnection = null;
                try
                {
                    url=new URL(urls[0]);
                    urlConnection=(HttpURLConnection) url.openConnection();
                    InputStream in = urlConnection.getInputStream();
                    InputStreamReader reader  = new InputStreamReader(in);
                    int data = reader.read();
                    while(data!=-1)
                    {
                        char current=(char) data;
                        result+=current;
                        data=reader.read();
                    }
                    return result;
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    return "Failed";
                }
            }
        }
    }[/CODE]


```
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.downloadwebcontent2">


    <uses-permission
        android:name="android.premission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.DownloadWebContent2">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
```

W/System.err: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:150)
W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
        at java.net.InetAddress.getAllByName(InetAddress.java:1152)
        at com.android.okhttp.Dns$1.lookup(Dns.java:41)
W/System.err:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:178)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:144)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:86)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:176)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30)
W/System.err:     at com.example.downloadwebcontent2.MainActivity$DownloadTask.doInBackground(MainActivity.java:50)
        at com.example.downloadwebcontent2.MainActivity$DownloadTask.doInBackground(MainActivity.java:40)
W/System.err:     at android.os.AsyncTask$3.call(AsyncTask.java:394)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
W/System.err:     at libcore.io.Linux.android_getaddrinfo(Native Method)
        at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:73)
        at libcore.io.BlockGuardOs.android_getaddrinfo(BlockGuardOs.java:202)
        at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:73)
W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:135)
        ... 24 more
W/System.err: Caused by: android.system.ErrnoException: android_getaddrinfo failed: EPERM (Operation not permitted)
W/System.err:     ... 29 more


----------



## mihe7 (25. Jul 2021)

Tintenfisch hat gesagt.:


> android.premission.INTERNET


premission != permission


----------



## Jw456 (25. Jul 2021)

mihe7 hat gesagt.:


> premission != permission


nein an der Permissioin liegt es nicht die ist OK




```
result = task.execute("https://www.google.de").get();
```
erstens. du willst von eine SSL Seite lesen aber benutzt nur die normale HttpURLConnection ohne „s“ benutze HttpsURLConnection



zweitens.  schickst du den Request  auch nicht ab also kann auch nichts im Stream ankommen.  urlConnection.connect();  fehlt vor  dem Stream.
Dann wird auch der default Get Request abgeschikt.


```
protected String doInBackground(String... urls) {
            String result = "";
            URL url;
            HttpsURLConnection urlConnection = null;
            try {
                url = new URL(urls[0]);
                urlConnection = (HttpsURLConnection) url.openConnection();
                //urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                InputStream in = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data = reader.read();
                while (data != -1) {
                    char current = (char) data;
                    .......
```


----------



## kneitzel (25. Jul 2021)

Jw456 hat gesagt.:


> nein an der Permissioin liegt es nicht die ist OK


Wie kommst Du darauf, dass die Rechte in Ordnung sind, wenn der TE da einen Tippfehler hat?



Jw456 hat gesagt.:


> erstens. du willst von eine SSL Seite lesen aber benutzt nur die normale HttpURLConnection ohne „s“ benutze HttpsURLConnection


Das ist doch komplett egal. HttpsURLConnection ist von HttpURLConnection abgeleitet. URL wird eine entsprechend korrekte Instanz erzeugen. Dein Code dürfte aber vermutlich eine ClassCastException werfen, wenn kein https URL angegeben wurde.

Der connect Aufruf sollte aber noch hinzu gefügt werden - da hast Du dann Recht.


----------



## Tintenfisch (25. Jul 2021)

Danke, ohjee, völlig übersehen, es lag tagsächlich an dem Vertauschen, bzw. dem Tippfehler premission / permission 🙊


----------



## Jw456 (26. Jul 2021)

Hallo noch eine keine Info am Rande
 AsyncTask ist seit API 30 deprecated.
Könnte also auf neuen Gräten Probleme machen.


			https://developer.android.com/reference/android/os/AsyncTask


----------

