L
louisbgt
Neues Mitglied
- 0
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
}
}
wenn ich allerdings die vorherige adresse nehme geht es, bei allen anderen aber nicht, da kommt folgendes: