iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  
昨天,已經說明第二段API,就是取得原來的資料,並且要資料顯示在對應的欄位。今天,就繼續來說明,在Android要如何連接在一起,如何要取得資料再回填到原來的欄位元件。完整的程式碼如下:
//宣告物件名稱。
private RequestQueue objqueue;
private final static String strurl = "http://192.168.63.231:8088/book/_api_gettags.php";

private Spinner lst_tag;
private EditText txt_name;
private EditText txt_content;
private TextView lbl_book_id;

ArrayList<String> arytags;
private StringRequest getRequest;

//第二次 GET 資料
private RequestQueue objgetrequestqueue;
private String strgeturl = "";

private StringRequest objgetstringrequest;

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

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

    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);
    lbl_book_id = (TextView)findViewById(R.id.lblbookid);

    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_edit.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);

    //再取得編輯的資料。
    Intent it2 = getIntent();
    String strbook_name = it2.getStringExtra("pname");

    prc_showmessage(strbook_name);
    
    strgeturl = "http://192.168.231:8088/book/_api_getbookinfobyname.php?pname=" + strbook_name;

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

    //實做Volley物件,在StringRequest的函式,預設值就是Request.Method.GET,可以省略。
    //而strurl,就是要GET的API網址。
    //最後,還要Override二個監聽的事件。
    objgetstringrequest = new StringRequest(strgeturl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //response,表示是回傳值,就是API要回傳的字串,也可以是JSON字串。

            String strname = "";
            String strcontent = "";
            String strtagname = "";
            String strbookid = "";

            //宣告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);
                    strname = jsonObject.getString("cbook_name");
                    strcontent = jsonObject.getString("ccontent");
                    strtagname =  jsonObject.getString("ctag_name");
                    strbookid = jsonObject.getString("cbook_id");
                }
            }
            catch(JSONException e) {
                e.printStackTrace();
            }

            //給修改的值
            txt_name.setText(strname);
            txt_content.setText(strcontent);
            lbl_book_id.setText(strbookid);
            
            try {

                int intposition = 0;

                intposition = ((ArrayAdapter) lst_tag.getAdapter()).getPosition(strtagname);

                lst_tag.setSelection(intposition, true);

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

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

}

執行出來的輸入畫面,如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181030/200009531piznib8o7.jpg

後續的章節。來討論到如何更新資料庫。


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

尚未有邦友留言

立即登入留言