iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
自我挑戰組

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

在Android Studio 3.x版開發Android系統的開發記事-如何呼叫API第二彈

接續昨天的範例,在Layout的部份,再增加二個可以輸入的EditText元件及一個Button元件,如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20181011/20000953TGhDP7tKjn.jpg

https://ithelp.ithome.com.tw/upload/images/20181011/20000953kHKDRRrHFU.jpg
拉好畫面,接下來,開始處理程式的部份。跟呼叫Get的函式差不多,只是再增加要輸入參數的函式。完整的程式碼:

public class MainActivity extends AppCompatActivity {

    //宣告物件名稱。
    private RequestQueue objqueue;
    private final static String strurl = "http://192.168.1.102:8088/get_json.php";

    private TextView lbl_result;
    private StringRequest getRequest;

    //宣告物件 (POST物件)
    private RequestQueue objpostqueue;
    private StringRequest postRequest;
    private final static String strposturl = "http://192.168.1.102:8088/frm_addnew.php";

    private EditText txt_title;
    private EditText txt_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //物件名稱跟Layout上的物件,產生連結。
        lbl_result = (TextView)findViewById(R.id.lblresult);

        //設定Volley物件。
        objqueue = Volley.newRequestQueue(this);

        //實做Volley物件,在StringRequest的函式,預設值就是Request.Method.GET,可以省略。
        //而strurl,就是要GET的API網址。
        //最後,還要Override二個監聽的事件。
        getRequest = new StringRequest(strurl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                //response,表示是回傳值,就是API要回傳的字串,也可以是JSON字串。
                lbl_result.setText(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //如果發生錯誤,就是回傳VolleyError,可以顯示是什麼錯誤。
                lbl_result.setText(error.getMessage());
            }
        });

        //物件名稱跟Layout的物件,產生連結 (POST物件)
        txt_title = (EditText)findViewById(R.id.txttitle);
        txt_content = (EditText)findViewById(R.id.txtcontent);

        //設定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字串。
                        lbl_result.setText(response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //如果發生錯誤,就是回傳VolleyError,可以顯示是什麼錯誤。
                lbl_result.setText(error.getMessage());
            }
        }) {
            @Override
            protected HashMap<String,String> getParams()
                    throws AuthFailureError {

                //跟GET模式不同的是,後續要加入傳入參數的函式。
                HashMap<String,String> hashMap = new HashMap<String,String>();

                String strtitle = "";
                String strcontent = "";

                //取得Layout輸入的資料,再用HashMap型態POST到PHP網頁。
                strtitle = txt_title.getText().toString();
                strcontent = txt_content.getText().toString();

                hashMap.put("ptitle",strtitle);
                hashMap.put("pcontent",strcontent);

                return hashMap;
            }
        };
    }

    //建立此函式,要設定Button的觸發事件函式。
    public void prc_getmessage (View v) {

        //將getRequest物件加入Volley物件的queue中,執行跟API的溝通。
        objqueue.add(getRequest);
    }

    //建立此函式,要設定Button的觸發事件函式。
    public void prc_postmessage(View v) {

        //將postRequest物件加入Volley物件的queue中,執行跟API的溝通。
        objpostqueue.add(postRequest);
    }

在Server端的PHP API程式碼:

<?php
    echo "send msg ok, title:".$_POST["ptitle"]." content:".$_POST["pcontent"];
?>

就簡單的抓到POST的兩個參數,再取得值,組成回傳字串即可。

在執行模擬器時,可以看到二個要輸入的欄位,輸入測試的資料,再按下「POST」按鈕,就成功的呼叫POST的API,回傳將輸入的資料,再組成的字串。如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181011/20000953Tb5ntbvqpI.jpg


上一篇
在Android Studio 3.x版開發Android系統的開發記事-如何呼叫API第一彈(下)
下一篇
在Android Studio 3.x版開發Android系統的開發記事-如何自訂ListView列表項目
系列文
在Android Studio 3.x版開發Android系統的開發記事30

尚未有邦友留言

立即登入留言