最後一段,就是要更新的書籍名稱、簡介、所屬分類、及更新資料的id,以Http POST的方式更新在伺服器的資料庫。請參考下述完整的程式碼:
_api_updatebookinfo.php
<?php
// 取得POST的值
$strname = $_POST["txtname"];
$stcontent = $_POST["txtcontent"];
$strtag = $_POST["hidtag_code"];
$strtag_id = "1";
$id = $_POST["hidbook_id"];
include("conn/_db_Config.php");
// 取得tag_id
$sql = "SELECT * FROM ttaginfo WHERE ctag_name='".$strtag."'";
// 執行SQL指令
$rows = mysqli_query($db,$sql);
while ($row = $rows->fetch_assoc()) {
$strtag_id = $row["ctag_id"];
}
// 建立SQL字串
$sql = "UPDATE tbookinfo SET cbook_name='".$strname.
"', ccontent='".$stcontent.
"', ctag_id=".$strtag_id." WHERE cbook_id=".$id;
//echo $sql;
// 執行SQL指令
mysqli_query($db,$sql);
// 關閉連接
mysqli_close($db);
// 回傳值
echo "更新資料成功。";
?>
回到Android,看看要如何呼叫此api,也是用之前文章用的方式,透過Volley物件,用POST的方式,將組合好的參數物件。回傳到php,再組成更新的SQL,再更新到資料庫。相關的程式碼,如下:
public void prc_btnupdate(View v) {
//設定Volley物件。 (POST物件)
objpostqueue = Volley.newRequestQueue(this);
//實做Volley物件,在StringRequest的函式,第一個參數,要宣告Request.Method.POST。
//而strposturl,就是要POST的API網址。
//最後,還要Override二個監聽的事件。
postRequest = new StringRequest(Request.Method.POST, strposturl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//response,表示是回傳值,就是API要回傳的字串,也可以是JSON字串。
prc_showmessage(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//如果發生錯誤,就是回傳VolleyError,可以顯示是什麼錯誤。
prc_showmessage(error.getMessage());
}
}) {
@Override
protected HashMap<String,String> getParams()
throws AuthFailureError {
//跟GET模式不同的是,後續要加入傳入參數的函式。
HashMap<String,String> hashMap = new HashMap<String,String>();
String strname = "";
String strcontent = "";
String strtag = "";
String strbookid = "";
//取得Layout輸入的資料,再用HashMap型態POST到PHP網頁。
strname = txt_name.getText().toString();
strcontent = txt_content.getText().toString();
strtag = lst_tag.getSelectedItem().toString();
strbookid = lbl_book_id.getText().toString();
hashMap.put("txtname",strname);
hashMap.put("txtcontent",strcontent);
hashMap.put("hidtag_code",strtag);
hashMap.put("hidbook_id",strbookid);
return hashMap;
}
};
//將getRequest物件加入Volley物件的queue中,執行跟API的溝通。
objpostqueue.add(postRequest);
Intent it = new Intent();
it= new Intent(this,frm_book_list.class);
startActivity(it);
this.finish();
}
public void prc_cancel(View v)
{
Intent it = new Intent();
it= new Intent(this,frm_book_list.class);
startActivity(it);
this.finish();
}
//顯示訊息
public void prc_showmessage(String strmessage)
{
Toast objtoast = Toast.makeText(this,strmessage, Toast.LENGTH_SHORT);
objtoast.show();
}
執行出來的輸入畫面,如下圖所示: