昨天討論到,在新增畫面時,先可以有分類的下拉選項。另一段API,就是要輸入的書籍名稱、簡介、所屬分類,以Http POST的方式回存在伺服器的資料庫。我們來看看完整的程式碼:
_api_addbookinfo.php
<?php
// 取得POST的值
$strname = $_POST["txtname"];
$stcontent = $_POST["txtcontent"];
$strtag = $_POST["hidtag_code"];
$strtag_id = "1";
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 = "INSERT INTO tbookinfo ( cbook_name, ctag_id, ccontent, ccreatedate) values('";
$sql.= $strname."', ". $strtag_id.", '". $stcontent."',now())";
//echo $sql;
// 執行SQL指令
mysqli_query($db,$sql);
// 關閉連接
mysqli_close($db);
// 回傳值
echo "儲存資料成功。";
?>
回到Android,看看要如何呼叫此api,也是用之前文章用的方式,透過Volley物件,用POST的方式,將組合好的參數物件。回傳到php,再組成新增的SQL,再新增到資料庫。相關的程式碼,如下:
public void prc_btnadd(View v) {
//prc_showmessage(strname + " " + strcontent + " " + strtag);
//設定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 = "";
//取得Layout輸入的資料,再用HashMap型態POST到PHP網頁。
strname = txt_name.getText().toString();
strcontent = txt_content.getText().toString();
strtag = lst_tag.getSelectedItem().toString();
//prc_showmessage(strname + " " + strcontent + " " + strtag);
hashMap.put("txtname",strname);
hashMap.put("txtcontent",strcontent);
hashMap.put("hidtag_code",strtag);
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();
}
執行出來的輸入畫面,如下圖所示: