iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  
昨天,有提到有關新增及點選ListView時,會觸發的事件及說明,如下述程式碼,特別加了注解的部份。主要是要切換到新增、編輯的Activity時,要用Intent物件來帶參數過去。
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

    //取得按下ListView的那個Item的值。
    String strbookname = adapterView.getItemAtPosition(i).toString();

    //按下Item時,要呼叫編輯的Activity,利用Intent物件帶參數過去。
    Intent it = new Intent();
    it= new Intent(this,frm_book_edit.class);

    it.putExtra("pname",strbookname);

    startActivity(it);

    //關閉本身的Activity。
    this.finish();

}

public void prc_btnadd(View v)
{
    //按下新增時,要呼叫新增的Activity,利用Intent物件。
    Intent it = new Intent();
    it= new Intent(this,frm_book_add.class);

    startActivity(it);

    //關閉本身的Activity。
    this.finish();
}

接下來,我們先來看看要如何新增書籍資料。在原來的專案,再增加一個Empty Activity,Activity名稱,取名為「frm_book_add」。再拉出三個TextView、二個EditVIew、一個Spinner及二個Button,來當做書籍名稱、簡介的輸入欄位及分類的下拉式選項。按下存檔的Button,再呼叫api來存入資料庫,再回到列表的Activity。順序來排列出來。如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20181027/20000953YzC4dgCJva.jpg

https://ithelp.ithome.com.tw/upload/images/20181027/20000953RsLSIn8hac.jpg

https://ithelp.ithome.com.tw/upload/images/20181027/20000953cAnHtx2JXS.jpg
呼叫的API,有二段。一個是將分類的資料,跟Spinner元件結合起來,才可以下拉式的方式來選取此書籍的分類。另一段,就是要輸入的書籍名稱、簡介、所屬分類,以Http POST的方式回存在伺服器的資料庫。

_api_gettags.php

<?php

	//引用資料庫連接檔案
    include("conn/_db_Config.php");

	//查詢分類資料的SQL語法
	//查詢分類資料的SQL語法
	//執行SQL語法,並且將資料轉成array
    $res = $db->query("select ctag_id, ctag_name from ttaginfo");
    
    $arytags = array();

    while ($row = $res->fetch_assoc()) {
    	$arytags[] = $row;
    }   
    
	//輸出成JSON字串,要加JSON_UNESCAPED_UNICODE,中文字才不會變成亂碼	
    echo json_encode($arytags, JSON_UNESCAPED_UNICODE);
?>

在網頁執行看看,沒有沒問題。
https://ithelp.ithome.com.tw/upload/images/20181027/20000953l5Wp7xGBz9.jpg

執行成功,回到Android,看看要如何呼叫此api,也是用之前文章用的方式,透過Volley物件,用GET的方式,回傳JSON字串。再解析成陣列後,再跟Spinner元件結合。完整的程式碼,如下:

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

private Spinner lst_tag;
private EditText txt_name;
private EditText txt_content;

ArrayList<String> arytags;
private StringRequest getRequest;

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

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

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    //物件名稱跟Layout上的物件,產生連結。
    lst_tag = (Spinner)findViewById(R.id.lsttag);
    txt_name = (EditText)findViewById(R.id.txtname);
    txt_content = (EditText)findViewById(R.id.txtcontent);

    arytags=new ArrayList<>();

    //設定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字串。

            //宣告JSONArray時,要用try...catch包起來,不然會出現錯誤。
            try{
                //將JSON字串,放到JSONArray中。
                JSONArray array = new JSONArray(response);

                //解出JSON的資料,將所要的資料,再寫入陣列中。
                for (int i = 0; i < array.length(); i++) {
                    JSONObject jsonObject = array.getJSONObject(i);
                    String strtagname = jsonObject.getString("ctag_name");
                    arytags.add(strtagname);
                }
            }
            catch(JSONException e) {
                e.printStackTrace();
            }

            //將陣列跟Spinner物件連結在一起。
            lst_tag.setAdapter(new ArrayAdapter<String>(frm_book_add.this, android.R.layout.simple_spinner_dropdown_item, arytags));

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            //如果發生錯誤,就是回傳VolleyError,可以顯示是什麼錯誤。
        }
    });

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

執行出來的新增畫面,如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181027/20000953lhpjLHyjVS.jpg

輸入好書籍名稱、內容後,再按「存檔」,將資料存回資料庫。後續,再說明如何將資料,存入資料庫。


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

尚未有邦友留言

立即登入留言