2012-03-24 7 views
36

Der unten eingefügte Code wurde von Java Docs unter HttpURLConnection übernommen.Wie man einen HTTP-Eingangsstrom liest

bekomme ich folgende Fehlermeldung:

readStream(in) 

, da es keine solche Methode ist.

Ich sehe das gleiche in die Klassenübersicht für URLConnection bei URLConnection.getInputStream()

Wo readStream ist? Der Code-Snippet ist unten angegeben:

URL url = new URL("http://www.android.com/"); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    try 
    {  
     InputStream in = new BufferedInputStream(urlConnection.getInputStream());  
     readStream(in); <-----NO SUCH METHOD 
    } 
    finally 
    {  
     urlConnection.disconnect(); 
    } 

Antwort

54

Versuchen Sie, mit diesem Code:

InputStream in = address.openStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
StringBuilder result = new StringBuilder(); 
String line; 
while((line = reader.readLine()) != null) { 
    result.append(line); 
} 
System.out.println(result.toString()); 
+6

Aus Gründen der Effizienz sollte 'result' auch ein StringBuffer-Objekt sein. –

+7

Ich würde vorschlagen, StringBuilder anstelle von StringBuffer zu verwenden, da Sie den zusätzlichen Synchronisierungsaufwand nicht benötigen. –

+3

'StringBuilder' ist gut mit Single-Thread-Betrieb zu verwenden. 'StringBuffer' sollte verwendet werden, wenn mehrere Threads einen Dampf auf dasselbe Objekt lesen und schreiben! –

12

Es sieht aus wie die Dokumentation nur readStream() verwendet, ist zu verstehen:

Ok, we've shown you how to get the InputStream, now your code goes in readStream()

So sollten Sie entweder Ihre eigene readStream() Methode schreiben, die tun, was man wollte mit dem tun die Daten an erster Stelle.

3

Frühling hat eine util Klasse dafür:

import org.springframework.util.FileCopyUtils; 

InputStream is = connection.getInputStream(); 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
FileCopyUtils.copy(is, bos); 
String data = new String(bos.toByteArray()); 
2

versuchen diesen Code

String data = ""; 
InputStream iStream = httpEntity.getContent(); 
BufferedReader br = new BufferedReader(new InputStreamReader(iStream, "utf8")); 
StringBuffer sb = new StringBuffer(); 
String line = ""; 

while ((line = br.readLine()) != null) { 
    sb.append(line); 
} 

data = sb.toString(); 
System.out.println(data); 
+0

Kann man davon ausgehen, dass die Codierung utf8 ist? – Edd

1

einen vollständigen Code für aus einem Webservice Lesen in Zwei Wege

public void buttonclick(View view) { 
    // the name of your webservice where reactance is your method 
    new GetMethodDemo().execute("http://wervicename.nl/service.asmx/reactance"); 
} 

public class GetMethodDemo extends AsyncTask<String, Void, String> { 
    //see also: 
    // https://developer.android.com/reference/java/net/HttpURLConnection.html 
    //writing to see: https://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html 
    String server_response; 
    @Override 
    protected String doInBackground(String... strings) { 
     URL url; 
     HttpURLConnection urlConnection = null; 
     try { 
      url = new URL(strings[0]); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      int responseCode = urlConnection.getResponseCode(); 
      if (responseCode == HttpURLConnection.HTTP_OK) { 
       server_response = readStream(urlConnection.getInputStream()); 
       Log.v("CatalogClient", server_response); 
      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      url = new URL(strings[0]); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(
        urlConnection.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) 
       System.out.println(inputLine); 
      in.close(); 
      Log.v("bufferv ", server_response); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Log.e("Response", "" + server_response); 
    //assume there is a field with id editText 
     EditText editText = (EditText) findViewById(R.id.editText); 
     editText.setText(server_response); 
    } 
}