* Resposta atualizada, que funciona no Android 6.0+. Obrigado a @Rohit Suthar , @Tamis Bolvari e @sudhiskr pelos comentários. *
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());
}
}
}
Referências:
Resposta mais antiga
Nota: Esta solução está desatualizada. Funciona apenas em dispositivos Android até 5.1. O Android 6.0 e superior não incluem o cliente http Apache usado nesta resposta.
O cliente Http do Apache Commons é o caminho a percorrer. Já está incluído no Android. Aqui está um exemplo simples de como fazer HTTP HTTP usando-o.
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
}
}
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
paraUTF-8
enconding.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" foram preteridos. Por favor, sugira outra solução.DefaultHttpClient
está obsoleto.NOT
mostra umPOST
exemplo. Seria bom editar a6.0
resposta. Esse é o mecanismo de pesquisa otimizado para mostrar como o primeiro resultado, o que é meio enganoso.para Android => 5
As classes org.apache.http e a classe AndroidHttpClient foram descontinuadas no Android 5.1 . Essas classes não estão mais sendo mantidas e você deve migrar qualquer código de aplicativo usando essas APIs para as classes URLConnection o mais rápido possível.
https://developer.android.com/about/versions/android-5.1.html#http
Pensei em compartilhar meu código usando HttpUrlConnection
...
Também você pode postar método:
Atualização 21/02/2016
para solicitação de postagem com json , veja este exemplo:
ATUALIZAÇÃO 24/08/2016
Use algumas das melhores bibliotecas, como:
Porque :
Em níveis mais baixos da API (principalmente no Gingerbread e Froyo), o HttpUrlConnection e o HttpClient estão longe de serem perfeitos.
Desde a introdução do Honeycomb (API 11), é obrigatório executar operações de rede em um thread separado, diferente do thread principal
fonte
performPostCall()
getPostData()
deve substituir porgetPostDataString()
Dessa forma, podemos enviar dados com o método http post e obter resultados
fonte
Este é um exemplo de como POSTAR dados de várias partes SEM usar bibliotecas externas do Apache:
fonte
para a resposta @primpop, eu adicionaria como converter a resposta em uma String:
Aqui está um exemplo de convertStramToString .
fonte
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" foram preteridos. Por favor, sugira outra solução.Melhor usar o Apache Commons HttpClient, que também já está incluído no Android. Dê uma olhada no Desenvolvedor Android: Resumo do Pacote do Cliente HTTP Apache para obter informações gerais sobre a API.
fonte
Você pode usar isso para enviar uma solicitação HTTP POST para um URL. Você pode facilmente enviar solicitação e obter resposta. Eu sempre uso isso. Eu trabalho bem para mim.
Você também precisa adicionar o arquivo Jar abaixo em libs folde
Por fim, edite seu build.gradle
No último, reconstrua seu projeto.
fonte
Use a
okHttp
biblioteca de código aberto da Square.okHttp
funciona a partir do Android 2.3 e superior e possui uma licença Apache 2.0 no GitHub .O envio de dados POST é tão simples quanto adicionar o seguinte em um AsyncTask:
okHttp
também possui um espaço para nome no maven, portanto, adicioná-lo ao seu projeto do Android Studio é simples. Basta adicionarcompile 'com.squareup.okhttp3:okhttp:3.11.0'
ao build.gradle do seu aplicativo.Código completo
Adicione o seguinte à sua atividade:
E chame-o usando:
fonte
Para mim trabalha a seguir:
fonte
Você pode usar
URLConnection
com , (para o envio de dados), e (para receber). A Sun tem um exemplo exatamente para isso .setDoOutput
(true)
getOutputStream()
getInputStream()
fonte
Se você apenas deseja acrescentar dados ao URL, pode fazê-lo usando HttpUrlConnection, pois HttpClient agora está obsoleto. Uma maneira melhor seria usar uma biblioteca como
Retrofit de vôlei
Podemos postar dados no script php e buscar o resultado e exibi-lo usando este código executado pela classe Through AsyncTask.
Porém, o uso de bibliotecas como vôlei ou retrofit é uma opção muito melhor, porque a classe Asynctask e o HttpurlConnection são mais lentos se comparados às bibliotecas. Além disso, a biblioteca buscará tudo e também será mais rápido.
fonte
Encontrei este exemplo útil com este tutorial em vídeo.
fonte
Método para postar dados como solicitação HTTP,
fonte
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" foram preteridos. Por favor, sugira outra solução.Você pode POSTAR um HttpRequest usando a classe WebServer e rastrear a resposta em sua interface de ouvinte.
Agora crie um DataRack para vincular seus dados
Agora basta enviar a solicitação POST com esse rack
Você precisa incluir minha biblioteca para isso. Documentações aqui
fonte
Nas versões mais recentes do Android, é necessário colocar todas as solicitações de E / S da web em um novo encadeamento. O AsyncTask funciona melhor para solicitações pequenas.
fonte