AsyncTask là một lớp trừu tượng do Android cung cấp giúp chúng ta sử dụng chuỗi giao diện người dùng đúng cách. Lớp này cho phép chúng tôi thực hiện các hoạt động dài / nền và hiển thị kết quả của nó trên chuỗi giao diện người dùng mà không cần phải thao tác các chuỗi.
Bạn có thể sử dụng AsyncTask để gọi các dịch vụ web của mình:
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
//call your webservice to perform MySQL database opration
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new Http Get("http://yourserver.com/webservices/service.php?id="
+ URLEncoder.encode("record_id") +"¶m1="
+ URLEncoder.encode("param1 value") + "¶m2="+ URLEncoder.encode("param2 value"));
HttpResponse response = httpclient.execute(httpget);
final String str=EntityUtils.toString(response.getEntity());
myjson = new JSONObject(str);
//perform JSON parsing to get webservice result.
if (myjson.has("success") == true) {
//Updation is succesful
} else {
//failed to perform updation
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
// This will be executed after completion of webservice call. and `String result` will have returned value from doInBackground()
// might want to change "executed" for the returned string passed
// into onPostExecute() but that is upto you
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
bây giờ, thực hiện lệnh gọi dịch vụ web bằng cách tạo đối tượng của LongOperation
lớp học,
LongOperation webCall = new LongOperation();
webCall.execute();
trong PHP, bạn nên viết như sau:
<?php
//DB Connection code:
$dbhost = "server";
$dbuser = "user_name";
$dbpassword = "pass";
$database = "your_db";
// connect to the database
$db = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Connection Error: ".mysql_error());
mysql_select_db($database, $db) or die("Error conecting to db.");
header("Content-type: text/json");
if (!isset($_GET['id']) || $_GET['id'] == "" ||!isset($_GET['param1']) || $_GET['param1'] == "" || !isset($_GET['param2']) || $_GET['param2'] == "" ){
echo json_encode(array('error' => 'Required arguments missing.'));
exit;
}
$id = mysql_real_escape_string($_GET['id']); //escape string to prevent SQL injection attack.
$param1 = mysql_real_escape_string($_GET['param1']);
$param2 = mysql_real_escape_string($_GET['param2']);
$sql = "update your_table set param1='$param1',param2='$param2' where id=$id";
mysql_query($sql);
if (mysql_affected_rows()==1) {
echo json_encode(array('success' => "updated"));
}else{
echo json_encode(array('error' => "not updated"));
}
?>
Bạn có thể sử dụng phương thức POST để chuyển các tham số cho webservice để làm cho nó an toàn hơn. :)