iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0
自我挑戰組

在Android Studio 3.x版開發Android系統的開發記事系列 第 25

在Android Studio 3.x版開發Android系統的開發記事-如何實做書籍管理系統(七)

最後一段,就是要更新的書籍名稱、簡介、所屬分類、及更新資料的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();
}

執行出來的輸入畫面,如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20181031/200009537HVBF0XiLu.jpg


上一篇
在Android Studio 3.x版開發Android系統的開發記事-如何實做書籍管理系統(六)
下一篇
在Android Studio 3.x版開發Android系統的開發記事-如何使用SQLite(一)
系列文
在Android Studio 3.x版開發Android系統的開發記事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言