Neuling, brauche Hilfe bei http Verbindung

  • 4 Antworten
  • Letztes Antwortdatum
D

danysahne333

Neues Mitglied
1
Hallo, seit ein paar Tagen beschäftige ich mich mit Java. Habe mich vorher mit PHP beschäftigt. Wie eine Android App im Groben aufgebaut ist, habe ich begriffen. Auch wie ich Werte ausgebe etc... . Aber wo ich nicht voran komme, ist die Internetverbindung, also das Abrufen bzw. Verbinden zu einer Webseite. Ich weiß absolut nicht woran es liegt und tue mich mit der Referenz auf AsyncTask | Android Developers schwer.

PHP:
public class MainActivity extends ActionBarActivity {
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  
        
        
        
     holeDaten fetch = new holeDaten();  
     String zk = fetch.doInBackground(); 
     TextView myTextView = (TextView) findViewById(R.id.tv);
     myTextView.setText(zk);
        
    }
}
  
  
 class holeDaten extends AsyncTask {
 
 @Override
    protected String doInBackground(Object... arg0) {
  
  String abc = null;
     try {
      String url = "http://www.google.com/";
       
       URL obj = new URL(url);
       HttpURLConnection con = (HttpURLConnection) obj.openConnection();
       int responseCode = con.getResponseCode();
       System.out.println("\nSending 'GET' request to URL : " + url);
       System.out.println("Response Code : " + responseCode);
  
       BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
       String inputLine;
       StringBuffer response = new StringBuffer();
  
       while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
       }
       in.close();
          abc = "connected";
     } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
         abc = "no connection";
         
     }
     return abc;
   
 }
}

Der Rückgabewert kommt ja auch an, aber eben nicht der Richtige. Was läuft hier falsch? Kann mir jemand weiterhelfen?

Viele Grüße :smile:
 
Was soll den ankommen?
Und was kommt an?

lg. Dagobert
 
Ich möchte später mal eine XML Datei auslesen, aber scheinbar gibt es aufgrund der Testausgabe " no connection" keine Verbindung zum Internet.
 
Ist ja auch klar... du gibst abc zurück und abc wird im catch block mit "no connection" befüllt...

man sollte niemals (manchmal schon) catch(Exception) machen...

vllt solltest du mit Java Grundlagen anfangen? =)

Du wirst auch niemals das erwartet Ergebnis bekommen mit diesem Code...

lg. Dagobert
 
AsyncTask ist der richtige Weg, nur verwendest du ihn falsch. Damit der Code von doInBackground() überhaupt asynchron ausgeführt wird, musst du erstmal execute() aufrufen. Man ruft nie direkt doInBackground() auf, das wird vom Task automatisch erledigt.

Code:
protected void onCreate(Bundle savedInstanceState) {
  
  //...
  
  holeDaten fetch = new holeDaten();  
  fetch.execute();
}

Dein zweites Problem ist, dass doInBackground() zwar einen Rückgabewert hat, aber auf den erhälst du nicht direkt Zugriff, weil du ja doInBackground() nicht manuell aufrufst. Der Rückgabewert wird an die Methode onPostExecute() übergeben. Weil diese Methode wieder im UI-Thread ausgeführt wird, darfst du dort normal auf deine UI-Elemente (TextViews, Buttons, ...) zugreifen.

Du könntest es also zum Beispiel so lösen:

Code:
class holeDaten extends AsyncTask<Void, Void, String>{
  
  @Override
  protected String doInBackground(Void arg0) {
    //bisheriger Code von doInBackground...
  }

  @Override
  protected void onPostExecute(String result) {
    TextView myTextView = (TextView) findViewById(R.id.tv);
    myTextView.setText(result);
  }
}
 

Ähnliche Themen

4
Antworten
10
Aufrufe
1.080
jogimuc
J
Zurück
Oben Unten