AsyncTaskは、Androidが提供する抽象クラスであり、UIスレッドを適切に使用するのに役立ちます。このクラスを使用すると、スレッドを操作しなくても、長い/バックグラウンド操作を実行して、その結果をUIスレッドに表示できます。
AsyncTaskを使用してWebサービスを呼び出すことができます:
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) {}
}
ここで、LongOperation
のオブジェクトを作成してWebサービス呼び出しを実行します クラス、
LongOperation webCall = new LongOperation();
webCall.execute();
PHPでは、次のように書く必要があります。
<?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"));
}
?>
POSTメソッドを使用してパラメーターをWebサービスに渡し、Webサービスをより安全にすることができます。 :)