J'ai besoin de Sync ou HTTP Async Post/Get pour obtenir des données HTML depuis Web-Service. Je recherche tout cet internet mais je ne peux pas donner un bon résultat.
J'ai essayé d'utiliser ces exemples:
mais rien d'eux travaille pour moi.
HttpClient
et HttpGet
est barré, l'erreur est:
"org.Apache.http.client.HttpClient est obsolète"
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();
}
L'exemple que j'ai posté ci-dessous est basé sur un exemple que j'ai trouvé sur le Documents de développement Android. Vous pouvez trouver cet exemple ICI , regardez-le pour un exemple plus complet.
Vous pourrez faire toutes les requêtes http avec les éléments suivants
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);
}
}
Vous pouvez jouer avec le code en fonction de vos besoins
Vous pouvez utiliser Volley Qui vous donne tout ce dont vous avez besoin. Si vous décidez d'utiliser AsyncTask et de le programmer vous-même, je vous recommanderais de ne pas inclure AsyncTask dans votre activité, mais de le placer dans une classe wrapper et d'utiliser un rappel à cela. Ceci maintient votre activité propre et rend le code réseau réutilisable. Ce qui est plus ou moins ce qu'ils ont fait dans Volley.
**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*/);
****---------------------------------------------------------------***
Pour la requête Post, modifiez simplement le paramètre: connection.setRequestMethod ("GET"); à
connection.setRequestMethod ("POST");