2015-06-19 17 views
9

Ich brauche Sync oder Async HTTP Post/Get, um HTML-Daten von Web-Service zu bekommen. Ich suche dieses ganze Internet, aber ich kann kein gutes Ergebnis geben.Wie mache ich Sync oder Async HTTP Post/Get

Ich habe versucht, diese Beispiele zu verwenden:

aber nichts von ihnen für mich arbeiten.

HttpClient und HttpGet ausstreichen wird, Fehler ist:

"org.apache.http.client.HttpClient is deprecated "

Code:

try 
{ 
    HttpClient client = new DefaultHttpClient(); 
    String getURL = "google.com"; 
    HttpGet get = new HttpGet(getURL); 
    HttpResponse responseGet = client.execute(get); 
    HttpEntity resEntityGet = responseGet.getEntity(); 
    if (resEntityGet != null) 
    { 
     //do something with the response 
    } 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
+0

kann sein, wenn Sie posten, was der Fehler in Ihrem Versuch führen kann, um zu führen. – Sree

+0

Ich kann nicht app laufen, weil Httpclient und HttpGet ist durchzustreichen, Fehler ist: "org.apache.http.client.HttpClient veraltet" Code: try { Httpclient client = new DefaultHttpClient(); Zeichenfolge getURL = "http://www.google.com"; HttpGet get = neu HttpGet (getURL); HttpResponse responseGet = client.execute (get); HttpEntity resEntityGet = AntwortGet.getEntity(); if (resEntityGet! = Null) { // Etwas mit der Antwort } } catch (Exception e) { e.printStackTrace(); } –

+0

Sie müssen herausfinden, warum Sie nicht ausführen können – Sree

Antwort

7

Das Beispiel I unten basiert auf einem Beispiel gebucht haben, die ich auf den Android Developer Docs gefunden. Sie können das Beispiel HERE finden, schauen Sie sich das für ein umfassenderes Beispiel an.

können Sie alle HTTP-Anfragen machen mit der folgenden

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class MainActivity extends Activity { 
    private static final String TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     new DownloadTask().execute("http://www.google.com/"); 
    } 

    private class DownloadTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      //do your request in here so that you don't interrupt the UI thread 
      try { 
       return downloadContent(params[0]); 
      } catch (IOException e) { 
       return "Unable to retrieve data. URL may be invalid."; 
      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      //Here you are done with the task 
      Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); 
     } 
    } 

    private String downloadContent(String myurl) throws IOException { 
     InputStream is = null; 
     int length = 500; 

     try { 
      URL url = new URL(myurl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      conn.connect(); 
      int response = conn.getResponseCode(); 
      Log.d(TAG, "The response is: " + response); 
      is = conn.getInputStream(); 

      // Convert the InputStream into a string 
      String contentAsString = convertInputStreamToString(is, length); 
      return contentAsString; 
     } finally { 
      if (is != null) { 
       is.close(); 
      } 
     } 
    } 

    public String convertInputStreamToString(InputStream stream, int length) throws IOException, UnsupportedEncodingException { 
     Reader reader = null; 
     reader = new InputStreamReader(stream, "UTF-8"); 
     char[] buffer = new char[length]; 
     reader.read(buffer); 
     return new String(buffer); 
    } 
} 

Sie mit dem Code spielen, um Ihre Bedürfnisse

+0

Compiler nicht erkennen: HttpURLConnection, URL, openConnection() und usw. siehe Bild: http://postimg.org/image/sjaav97yx/ –

+1

Fügen Sie die Importe hinzu, die ich dem Code hinzugefügt habe – Neil

+0

Ich habe Bibliothek hinzugefügt, aber immer noch einige Fehler, siehe Bildschirm: http : //postimg.org/image/re791wksx/ –

3

Sie Volley können anpassen, die Sie alles, was Sie gibt benötigen. Wenn Sie sich entscheiden, AsyncTask zu verwenden und es selbst zu programmieren, würde ich empfehlen, AsyncTask nicht in Ihrer Aktivität zu haben, sondern es in eine Wrapperklasse zu legen und einen Rückruf zu verwenden. Dies hält Ihre Aktivität sauber und macht den Netzwerkcode wiederverwendbar. Das ist mehr oder weniger was sie in Volley gemacht haben.

+1

Volley ist eine großartige Alternative und eigentlich eine bessere Option! – Neil

0
**Async POST & GET request** 

public class FetchFromServerTask extends AsyncTask<String, Void, String> { 
    private FetchFromServerUser user; 
    private int id; 

    public FetchFromServerTask(FetchFromServerUser user, int id) { 
     this.user = user; 
     this.id = id; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     user.onPreFetch(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     URL urlCould; 
     HttpURLConnection connection; 
     InputStream inputStream = null; 
     try { 
      String url = params[0]; 
      urlCould = new URL(url); 
      connection = (HttpURLConnection) urlCould.openConnection(); 
      connection.setConnectTimeout(30000); 
      connection.setReadTimeout(30000); 
      connection.setRequestMethod("GET"); 
      connection.connect(); 

      inputStream = connection.getInputStream(); 

     } catch (MalformedURLException MEx){ 

     } catch (IOException IOEx){ 
      Log.e("Utils", "HTTP failed to fetch data"); 
      return null; 
     } 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
     StringBuilder sb = new StringBuilder(); 
     String line; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 

    protected void onPostExecute(String string) { 

     //Do your own implementation 
    } 
} 


****---------------------------------------------------------------*** 


You can use GET request inn any class like this: 
new FetchFromServerTask(this, 0).execute(/*Your url*/); 

****---------------------------------------------------------------*** 

Für die Post-Anfrage ändern Sie einfach: connection.setRequestMethod ("GET"); zu

connection.setRequestMethod ("POST");

Verwandte Themen