后端 在Android Studio 3.x版开发Android系统的开发记事

waldenlake · August 12, 2021 · 1 hits

最后一段,就是要更新的书籍名称、简介、所属分类、及更新数据的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://d1dwq032kyr03c.cloudfront.net/upload/images/20181031/200009537HVBF0XiLu.jpg


No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.