Announcement

Collapse
No announcement yet.

Probleme mit doInBackground()

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit doInBackground()

    Hallo,
    ich bin neu hier und habe kein Vorstellungsforum gefunden deshalb hier: Bin zur Zeit auf der Technikerschule und gerade dabei mein Abschlussprojekt zu erstellen. Unter anderem muss ein App entwickelt werden. Das läuft auch im großen und ganzen gut bis auf ein paar Probleme. Das größte Problem ist das ich auf meinem Rechner mit doInBackground den Inhalt einer Webseite herunterladen möchte und es bei mir nicht funktioniert. Im try and catch der doInBackground Methode wirft die Anwendung Exception e aus. Das verrückte ist wenn ich das Projekt einem Teammitglied schicke läuft es bei Ihm. Wenn er mir ein Package sendet und ich das in Android Studio öffne und ausführe läuft es auch. Nur von erstellte Projekte laufen bei mir nicht......... Permissions im Manifest für Internet sind gesetzt.
    Nun haben wir das so gelöst das mein Teammitglied mir immer Packages erstellt hat und mir gesendet(umständlich aber wir haben keine andere Lösung gefunden).
    Allerdings wollten wir jetzt mit Git und Github zusammen an dem Projekt arbeiten und jetzt läuft es bei ihm auch nicht mehr. Gleiche exception wie vorher.....
    Haben schon Stundenlang gegooglt aber keine Lösung für das Problem gefunden.
    Hatte jemand das schon mal oder kann in dieser Angelegenheit weiterhelfen?

    Hier der Code falls da das Problem enthalten ist:
    //Innere Klasse welche das Herunterladen von Inhalten aus dem Internet ermöglicht public class DownloadTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String result = ""; HttpURLConnection urlConnection = null; try { URL 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 (MalformedURLException e) { e.printStackTrace(); Fehler = true; return "failed MalformedURLException e"; } catch (Exception e) { Fehler = true; e.printStackTrace(); return "failed Exception e"; } } } //Diese Methode lädt den Inhalt der übergebenen Internetseite herunter und gibt ihn als String aus public String herunterladen(String url) { String tuti = ""; DownloadTask task = new DownloadTask(); try { tuti = task.execute(url).get(); } catch (ExecutionException e) { e.printStackTrace(); Fehler = true; Log.i("Info", "ExecutionException e"); } catch (InterruptedException e) { e.printStackTrace(); Fehler = true; Log.i("Info", "InterruptedException e"); } return tuti; } Vielen Dank im voraus und beste Grüße

  • #2
    Mist der Code sollte nicht so abgebildet sein ;( sorry. gibt es eine Möglichkeit hier gut Code darzustellen?

    Comment


    • #3
      Wahrscheinlich mit dem CODE-Tag
      Code:
              try{
                  URL url=new URL(urlString);
                  urlConnection=(HttpURLConnection)url.openConnection();
                  urlConnection.setRequestProperty("Authorization",authHeaderValue);
                  urlConnection.setRequestMethod("GET");
                  int code=urlConnection.getResponseCode();
                  if(code!=200){
                      result.add("HTTP Fehler: "+code);
                  }
                  BufferedReader rd=new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                  String line;
                  while((line=rd.readLine())!=null){
                      if(!line.isEmpty()){
                          result.add(line);
                      }
                  }
              }catch(Exception e){
      //            e.printStackTrace();
                  connectionError=true;
                  Toast.makeText(getApplicationContext(),"Fehler"+e.getMessage(),Toast.LENGTH_LONG).show();
              }finally{
                  if(urlConnection!=null){
                      urlConnection.disconnect();
                  }
              }
      Christian

      Comment


      • #4
        ahh das macht Sinn Danke für deine schnelle Antwort. Mein teamkollege ist allerdings schon auf eine andere Lösung gestoßen und zwar hat er im Manifest
        android:usesCleartextTraffic="true" eingetragen. Anscheinend muss das ab API9 eingetragen werden damit mit einer http seite Verbindung aufgenommen werden kann. Grüße

        Comment


        • #5
          Ja, muss es
          außerdem eine network_security_config.xml im XML-Ordner für HTTP ohne S

          Code:
          <network-security-config>
              <domain-config cleartextTrafficPermitted="true">
                  <domain includeSubdomains="true">XXXXXXX</domain>
              </domain-config>
          </network-security-config>
          Zuletzt editiert von Christian Marquardt; 01.09.2022, 17:03.
          Christian

          Comment

          Working...
          X