Download Web-Content, AsyncTask

Tintenfisch

Bekanntes Mitglied
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:
<?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
 

Jw456

Top Contributor
premission != permission :)
nein an der Permissioin liegt es nicht die ist OK



Java:
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.

Java:
        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;
                    .......
 
K

kneitzel

Gast
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?

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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
J Download und speichern mit jsch klappt nicht Android & Cross-Platform Mobile Apps 5
J BLOB nach dem Download unbrauchbar Android & Cross-Platform Mobile Apps 0
T AsyncTask / Download sehr langsam Android & Cross-Platform Mobile Apps 2
T JCifs Download unter Android beschleunigen Android & Cross-Platform Mobile Apps 0
N Java ME Download von Werten im SourceCode aufrufen Android & Cross-Platform Mobile Apps 5
K Nokia SDK & Carbide.j download Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
R Content-Provider-Sicherheit Android & Cross-Platform Mobile Apps 0
C ViewFlipper und gleiche IDs im Content Android & Cross-Platform Mobile Apps 6
G Fehlermeldung: "No XML content. Please add a root view or layout to your documet." Android & Cross-Platform Mobile Apps 7
topi Android AsyncTask ist deprecated Android & Cross-Platform Mobile Apps 5
M mehrere URLs in einem AsyncTask abarbeiten Android & Cross-Platform Mobile Apps 2
B Android [Änfänger] Void aus AsyncTask aufrufen Android & Cross-Platform Mobile Apps 3
B Android UI änderung aus AsyncTask Android & Cross-Platform Mobile Apps 1
S AsyncTask und doInBackground Frage Android & Cross-Platform Mobile Apps 2
G Beziehung von THIS beim Imageadapter und AsyncTask Android & Cross-Platform Mobile Apps 7

Ähnliche Java Themen

Neue Themen


Oben