AsyncTask Android द्वारा प्रदान किया गया एक अमूर्त वर्ग है जो हमें UI थ्रेड का ठीक से उपयोग करने में मदद करता है। यह वर्ग हमें लंबे/पृष्ठभूमि संचालन करने और थ्रेड में हेरफेर किए बिना UI थ्रेड पर अपना परिणाम दिखाने की अनुमति देता है।
आप अपनी वेब सेवाओं को कॉल करने के लिए AsyncTask का उपयोग कर सकते हैं:
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
. का ऑब्जेक्ट बनाकर webservice कॉल करें क्लास,
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"));
}
?>
आप इसे और अधिक सुरक्षित बनाने के लिए webservice को पैरामीटर पास करने के लिए POST विधि का उपयोग कर सकते हैं। :)पी>