Saya berpengalaman dengan PHP, JavaScript, dan banyak bahasa scripting lainnya, tapi saya tidak punya banyak pengalaman dengan Java atau Android.
Saya mencari cara untuk mengirim data POST ke skrip PHP dan menampilkan hasilnya.
sumber
Saya berpengalaman dengan PHP, JavaScript, dan banyak bahasa scripting lainnya, tapi saya tidak punya banyak pengalaman dengan Java atau Android.
Saya mencari cara untuk mengirim data POST ke skrip PHP dan menampilkan hasilnya.
* Jawaban Diperbarui yang berfungsi pada Android 6.0+. Terima kasih kepada @Rohit Suthar , @Tamis Bolvari dan @sudhiskr untuk komentarnya. *
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());
}
}
}
Referensi:
Jawaban Lama
Catatan: Solusi ini sudah usang. Ini hanya berfungsi pada perangkat Android hingga 5.1. Android 6.0 dan di atasnya tidak termasuk klien Apache http yang digunakan dalam jawaban ini.
Http Client dari Apache Commons adalah caranya. Ini sudah termasuk dalam android. Berikut adalah contoh sederhana tentang bagaimana melakukan HTTP Post menggunakannya.
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"));
untukUTF-8
enconding.HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sudah usang. Tolong sarankan solusi lain.DefaultHttpClient
sudah usang.NOT
menunjukkanPOST
contoh. Akan menyenangkan untuk mengedit6.0
jawabannya. Ini adalah mesin pencari yang dioptimalkan untuk ditampilkan sebagai hasil pertama, yang agak menyesatkan.untuk Android => 5
The org.apache.http kelas dan AndroidHttpClient kelas telah ditinggalkan di Android 5.1 . Kelas-kelas ini tidak lagi dipertahankan dan Anda harus memigrasi kode aplikasi apa pun menggunakan API ini ke kelas URLConnection sesegera mungkin.
https://developer.android.com/about/versions/android-5.1.html#http
Memikirkan berbagi kode saya menggunakan HttpUrlConnection
...
Anda juga dapat memposting metode:
Perbarui 21/02/2016
untuk permintaan posting dengan json , lihat contoh ini:
UPDATE 24/08/2016
Gunakan beberapa perpustakaan terbaik, seperti:
karena:
Pada tingkat API yang lebih rendah (kebanyakan pada Gingerbread dan Froyo), HttpUrlConnection dan HttpClient jauh dari sempurna
Sejak diperkenalkannya Honeycomb (API 11), sudah wajib untuk melakukan operasi jaringan pada utas terpisah, berbeda dari utas utama
sumber
performPostCall()
getPostData()
harus diganti dengangetPostDataString()
Dengan cara ini kita dapat mengirim data dengan metode posting http dan mendapatkan hasilnya
sumber
Ini adalah contoh cara POST data multi-bagian TANPA menggunakan pustaka Apache eksternal:
sumber
to @primpop answer Saya akan menambahkan cara mengubah respons dalam sebuah String:
Berikut adalah contoh convertStramToString .
sumber
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sudah usang. Tolong sarankan solusi lain.Lebih baik gunakan Apache Commons HttpClient, yang juga sudah termasuk dalam android. Lihatlah Pengembang Android: Ringkasan Paket Klien HTTP Apache untuk info api umum.
sumber
Anda dapat menggunakan ini untuk mengirim permintaan HTTP POST ke URL. Anda dapat dengan mudah mengirim permintaan dan mendapatkan respons. Saya selalu menggunakan ini. Saya bekerja dengan baik untuk saya.
Anda juga perlu menambahkan file Jar di bawah ini di libs folde
Terakhir, edit build.gradle Anda
Dalam Membangun kembali proyek Anda yang terakhir.
sumber
Gunakan
okHttp
perpustakaan open source dari Square.okHttp
bekerja dari Android 2.3 dan lebih tinggi dan memiliki lisensi Apache 2.0 di GitHub .Mengirim data POST semudah menambahkan yang berikut di AsyncTask:
okHttp
juga memiliki namespace di maven, jadi menambahkannya ke proyek Android Studio Anda sederhana. Cukup tambahkancompile 'com.squareup.okhttp3:okhttp:3.11.0'
ke build.gradle aplikasi Anda.Kode Lengkap
Tambahkan yang berikut ke aktivitas Anda:
Dan menyebutnya menggunakan:
sumber
Bagi saya bekerja selanjutnya:
sumber
Anda dapat menggunakan
URLConnection
dengan , (untuk mengirim data), dan (untuk menerima). Sun punya contoh untuk hal ini .setDoOutput
(true)
getOutputStream()
getInputStream()
sumber
Jika Anda hanya ingin menambahkan data ke Url Anda dapat melakukannya dengan menggunakan HttpUrlConnection karena HttpClient sekarang sudah tidak digunakan lagi. Cara yang lebih baik adalah dengan menggunakan perpustakaan seperti-
Volley Retrofit
Kami dapat memposting data ke skrip php dan mengambil hasil dan menampilkannya dengan menggunakan kode ini dilakukan melalui kelas AsyncTask.
Tetapi menggunakan perpustakaan seperti volley atau retrofit adalah pilihan yang jauh lebih baik karena kelas Asynctask dan HttpurlConnection lebih lambat dibandingkan dengan perpustakaan. Juga perpustakaan akan mengambil semuanya dan juga lebih cepat.
sumber
Saya menemukan ini contoh membantu dengan ini tutorial video.
sumber
Metode untuk mengirim data sebagai permintaan HTTP,
sumber
HttpClient
", "HttpPost
", "HttpResponse
", "HttpEntity
", "EntityUtils
", "NameValuePair
", "BasicNameValuePair
" sudah usang. Tolong sarankan solusi lain.Anda dapat POST sebuah HttpRequest menggunakan kelas WebServer dan melacak respons di antarmuka pendengarnya.
Sekarang buat DataRack untuk mengikat data Anda
Sekarang cukup kirim permintaan POST dengan rak itu
Anda perlu memasukkan perpustakaan saya untuk ini. Dokumentasi di sini
sumber
Dalam versi Android yang lebih baru Anda harus memasukkan semua permintaan I / O web ke utas baru. AsyncTask berfungsi paling baik untuk permintaan kecil.
sumber