L
louisbgt
Neues Mitglied
Ich möchte die xml Datei herunterladen, aber es geht nicht immer
wenn ich allerdings die vorherige adresse nehme geht es, bei allen anderen aber nicht, da kommt folgendes:

Javascript:
package com.udemy.guessthecarbrand;
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.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutionException;
import javax.net.ssl.HttpsURLConnection;
public class MainActivity extends AppCompatActivity {
// <wird übergeben, nichts wird zurückgegeben>
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url; // initialisieren wir erst später
HttpsURLConnection urlConnection = null;
// mehrstufiger Prozess: 1. brauch ich den Link auf den ich verbinden will
// 2. dann muss ich auf den Link verbinden
// 3. dann brauch ich ein InputStream, der die Daten in einer bestimmten Form ausliest
// wir Verbindung/ Kanal, wo die Daten durch gehen
// 4. muss ich InputStream mit ...Reader auslesen
// 5. nun können wir daraus Daten machen
try {
url = new URL(urls[0]);
urlConnection = (HttpsURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1){ //solange nicht minus 1 ist
char current = (char) data; //gib die aktuellen Daten in Buchstaben aus, jedes einzelne Zeichen
// befüllen von result
// name += ...; heißt wir hängen an
result += current;
data = reader.read();
}
//nach der while-Schleife, sprich nach dem alle Daten ausgelesen wurden
//geben wir result aus
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
return "Failed";
} catch (Exception e) { //alle Probleme
e.printStackTrace();
return "Failed";
}
// return null; >> brauchen wir nicht mehr, da alle Stränge return zurück geben
// da oben vor Methodenname String steht
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Klasse aufrufen
// lege Projekt an und initialisiere es
DownloadTask task = new DownloadTask();
String code = null;
try {
code = task.execute("https://www.usmagazine.com/celebrities/f/").get();
} catch (ExecutionException e) { //Verbindung wurde unterbrochen
e.printStackTrace();
} catch (InterruptedException e) { //Fehler bei der Ausführung des Ganzen
e.printStackTrace();
} catch (Exception e){ // für jede andere Exception, wie z.B. gar kein Internet
e.printStackTrace();
}
Log.i("Result", code);
//wir brauchen Erlaubnis um aufs Internet zuzugreifen
// sonst: Logcat > D/NetworkSecurityConfig: No Network Security Config specified, using platform default
// deshalb: im AndroidManifest.xml
}
}
