* Respuesta actualizada que funciona en Android 6.0+. Gracias a @Rohit Suthar , @Tamis Bolvari y @sudhiskr por los comentarios. * *
public class CallAPI extends AsyncTask<String, String, String> {
public CallAPI(){
//set context variables if required
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String urlString = params[0]; // URL to call
String data = params[1]; //data to post
OutputStream out = null;
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
out = new BufferedOutputStream(urlConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
out.close();
urlConnection.connect();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Referencias
Respuesta anterior
Nota: esta solución está desactualizada. Solo funciona en dispositivos Android hasta 5.1. Android 6.0 y superior no incluyen el cliente http Apache utilizado en esta respuesta.
Http Client de Apache Commons es el camino a seguir. Ya está incluido en Android. Aquí hay un ejemplo simple de cómo hacer HTTP Post usándolo.
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
Pappachan primigenio
fuente
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
porUTF-8
encontrarnos.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" están en desuso. Por favor sugiera otra solución.DefaultHttpClient
está en desuso.NOT
muestra unPOST
ejemplo. Sería bueno editar la6.0
respuesta. Este es un motor de búsqueda optimizado para mostrarse como el primer resultado, lo cual es un poco engañoso.para Android => 5
Las clases org.apache.http y la clase AndroidHttpClient han quedado en desuso en Android 5.1 . Estas clases ya no se mantienen y debe migrar cualquier código de aplicación que use estas API a las clases URLConnection lo antes posible.
https://developer.android.com/about/versions/android-5.1.html#http
Pensé en compartir mi código usando HttpUrlConnection
...
También puedes publicar el método:
Actualización 21/02/2016
para la solicitud de publicación con json , vea este ejemplo:
ACTUALIZACIÓN 24/08/2016
Use la mejor biblioteca, como:
porque :
En niveles de API más bajos (principalmente en Gingerbread y Froyo), HttpUrlConnection y HttpClient están lejos de ser perfectos
Desde la introducción de Honeycomb (API 11), ha sido obligatorio realizar operaciones de red en un hilo separado, diferente del hilo principal
fuente
performPostCall()
getPostData()
debería reemplazar congetPostDataString()
De esta manera podemos enviar datos con el método de publicación http y obtener resultados
fuente
Este es un ejemplo de cómo PUBLICAR datos de varias partes SIN usar bibliotecas externas de Apache:
fuente
a la respuesta @primpop, agregaría cómo convertir la respuesta en una cadena:
Aquí hay un ejemplo de convertStramToString .
fuente
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" están en desuso. Por favor sugiera otra solución.Mejor usar Apache Commons HttpClient, que también está incluido en Android. Eche un vistazo a Android Developer: Resumen del paquete del cliente HTTP Apache para obtener información general de la API.
fuente
Puede usar esto para enviar una solicitud HTTP POST a una URL. Puede enviar fácilmente una solicitud y obtener una respuesta. Yo siempre uso esto. Estoy bien para mí.
También debe agregar el siguiente archivo Jar en libs folde
Finalmente edite su build.gradle
En el último Reconstruye tu proyecto.
fuente
Use la
okHttp
biblioteca de código abierto de Square.okHttp
funciona desde Android 2.3 y versiones posteriores y tiene una licencia Apache 2.0 en GitHub .Enviar datos POST es tan simple como agregar lo siguiente en una AsyncTask:
okHttp
también tiene un espacio de nombres en maven, por lo que agregarlo a su proyecto de Android Studio es simple. Simplemente agréguelocompile 'com.squareup.okhttp3:okhttp:3.11.0'
a build.gradle de su aplicación.Código completo
Agregue lo siguiente a su actividad:
Y llámalo usando:
fuente
Para mí funciona a continuación:
fuente
Puede usar
URLConnection
con , (para enviar datos) y (para recibir). Sun tiene un ejemplo para exactamente esto .setDoOutput
(true)
getOutputStream()
getInputStream()
fuente
Si solo desea agregar datos a la URL, puede hacerlo utilizando HttpUrlConnection ya que HttpClient ahora está en desuso. Una mejor manera sería usar una biblioteca como ...
Volley Retrofit
Podemos publicar datos en el script php y obtener el resultado y mostrarlo usando este código realizado a través de la clase AsyncTask.
Pero usar bibliotecas como volley o retrofit es una opción mucho mejor porque la clase Asynctask y HttpurlConnection son más lentas en comparación con las bibliotecas. Además, la biblioteca buscará todo y también es más rápida.
fuente
Encontré este útil ejemplo con este video tutorial.
fuente
Método para publicar datos como solicitud HTTP,
fuente
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" están en desuso. Por favor sugiera otra solución.Puede PUBLICAR una HttpRequest usando la clase WebServer y rastrear la respuesta en su interfaz de escucha.
Ahora cree un DataRack para vincular sus datos
Ahora simplemente envíe la solicitud POST con ese rack
Necesitas incluir mi biblioteca para esto. Documentaciones aqui
fuente
En las versiones más recientes de Android, debe colocar todas las solicitudes de E / S web en un nuevo hilo. AsyncTask funciona mejor para pequeñas solicitudes.
fuente