* Обновленный ответ, который работает на Android 6.0+. Спасибо @Rohit Suthar , @Tamis Bolvari и @sudhiskr за комментарии. *
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());
}
}
}
Ссылки:
Старый ответ
Примечание: это решение устарело. Работает только на устройствах Android до 5.1. Android 6.0 и выше не включают в себя HTTP-клиент Apache, используемый в этом ответе.
Http Client от Apache Commons - это путь. Он уже включен в Android. Вот простой пример того, как сделать HTTP Post используя его.
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"));
дляUTF-8
заключения.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" устарели. Пожалуйста, предложите другое решение.DefaultHttpClient
не рекомендуется.NOT
показываетPOST
пример. Было бы неплохо отредактировать6.0
ответ. Эта поисковая система оптимизирована для показа в качестве первого результата, что вводит в заблуждение.для Android => 5
В org.apache.http классы и AndroidHttpClient класса были устаревшими в Android 5.1 . Эти классы больше не поддерживаются, и вы должны как можно скорее перенести любой код приложения с помощью этих API в классы URLConnection .
https://developer.android.com/about/versions/android-5.1.html#http
Мысль поделиться своим кодом с помощью HttpUrlConnection
...
Также вы можете опубликовать метод:
Обновление 21/02/2016
для отправки запроса с помощью json , см. этот пример:
ОБНОВЛЕНИЕ 24/08/2016
Используйте лучшую библиотеку, такую как:
так как :
На более низких уровнях API (в основном на Gingerbread и Froyo) HttpUrlConnection и HttpClient далеки от совершенства
С момента появления Honeycomb (API 11) было обязательным выполнять сетевые операции в отдельном потоке, отличном от основного потока
источник
performPostCall()
getPostData()
следует заменитьgetPostDataString()
Таким образом, мы можем отправлять данные методом http post и получать результат
источник
Это пример того, как размещать данные из нескольких частей БЕЗ использования внешних библиотек Apache:
источник
к @primpop answer я бы добавил, как преобразовать ответ в строку:
Вот пример convertStramToString .
источник
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" устарели. Пожалуйста, предложите другое решение.Лучше использовать Apache Commons HttpClient, который также включен в Android. Посмотрите на Android Developer: Apache HTTP Client Package для получения общей информации о API.
источник
Вы можете использовать это для отправки HTTP-запроса POST на URL. Вы можете легко отправить запрос и получить ответ. Я всегда использую это. Я хорошо работаю со мной.
Вы также должны добавить ниже файл Jar в папке libs
Наконец отредактируйте свой build.gradle
В последнем перестрой свой проект.
источник
Используйте
okHttp
библиотеку с открытым исходным кодом от Square.okHttp
работает с Android 2.3 и выше и имеет лицензию Apache 2.0 на GitHub .Отправка данных POST так же проста, как добавление следующего в AsyncTask:
okHttp
также есть пространство имен на maven, поэтому добавить его в проект Android Studio очень просто. Просто добавьтеcompile 'com.squareup.okhttp3:okhttp:3.11.0'
в свое приложение build.gradle.Полный код
Добавьте в свою деятельность следующее:
И назовите это используя:
источник
У меня работает следующее:
источник
Вы можете использовать
URLConnection
с , (для отправки данных) и (для получения). У Sun есть пример именно для этого .setDoOutput
(true)
getOutputStream()
getInputStream()
источник
Если вы просто хотите добавить данные в URL-адрес, вы можете сделать это с помощью HttpUrlConnection, так как теперь HttpClient устарел. Лучшим способом было бы использовать библиотеку как
Залп модернизации
Мы можем публиковать данные в php-скрипте, извлекать результаты и отображать их, используя этот код, выполняемый через класс AsyncTask.
Но использование таких библиотек, как volley или retrofit, гораздо лучше, потому что класс Asynctask и HttpurlConnection работают медленнее, чем библиотеки. Также библиотека будет загружать все и быстрее.
источник
Я нашел этот полезный пример с этим видео уроком.
источник
Способ размещения данных в виде HTTP-запроса,
источник
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" устарели. Пожалуйста, предложите другое решение.Вы можете отправить запрос HttpRequest с помощью класса WebServer и отслеживать ответ в его интерфейсе слушателя.
Теперь создайте DataRack, чтобы связать ваши данные
Теперь просто отправьте запрос POST с этой стойкой
Вы должны включить мою библиотеку для этого. Документация здесь
источник
В более новых версиях Android вы должны помещать все запросы веб-ввода / вывода в новый поток. AsyncTask лучше всего подходит для небольших запросов.
источник