iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

首先,先建立用php寫出來的api,將書籍資料列表出來,寫的方式,就是先查詢出所有的書籍資料,再輸出成JSON格式的字串。再回傳給Android,再解析JSON格式後,再跟ListView結合在一起,顯示出資料。

下述為完整的php程式碼:

_db_Config.php

<?php
	
	//連接資料庫的Server、帳號、密碼、資料庫
	$db = new mysqli("localhost","root","password","bookinfo") or die("數據庫連接失敗!".$mysqli->errno);

	//設定UTF8相關的選項
	mysqli_query($db,"SET NAMES utf8");
    mysqli_query($db,"CHARACTER SET utf8");
    mysqli_query($db,"SET COLLATION_CONNECTION=utf8_general_ci");
    mysqli_query($db,"SET CHARACTER_SET_CLIENT =utf8");
    mysqli_query($db,"SET CHARACTER_SET_RESULTS =utf8");
    mysqli_query($db,"SET CHARACTER_SET_SERVER = utf8");
    mysqli_query($db,"SET character_set_connection=utf8");
	
?>

_api_getbookslist.php

<?php

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

	//查詢書籍資料列表的SQL語法
	$sql = "select tbookinfo.*,ttaginfo.ctag_name from tbookinfo left join ttaginfo on tbookinfo.ctag_id = ttaginfo.ctag_id";
	
	//執行SQL語法,並且將資料轉成array
    $res = $db->query($sql);
    $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/20181026/2000095386JTu5hOPl.jpg

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

public class frm_book_list extends AppCompatActivity implements ListView.OnItemClickListener {

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

    private ListView lsvbook;
    ArrayList<String> arybooks;
    private StringRequest getRequest;

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

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

        //物件名稱跟Layout上的物件,產生連結。
        lsvbook = (ListView) findViewById(R.id.lsvbook);
        lsvbook.setOnItemClickListener(this);

        arybooks=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("cbook_name");
                        arybooks.add(strtagname);
                    }
                }
                catch(JSONException e) {
                    e.printStackTrace();
                }

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

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

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

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        String strbookname = adapterView.getItemAtPosition(i).toString();
        
        Intent it = new Intent();
        it= new Intent(this,frm_book_edit.class);

        it.putExtra("pname",strbookname);

        startActivity(it);

        this.finish();

    }
    
    public void prc_btnadd(View v)
    {
        Intent it = new Intent();
        it= new Intent(this,frm_book_add.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/20181026/20000953VMfBmHOZBL.jpg

有關新增及點選ListView時,會觸發的事件及說明,後續,再解說。


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

尚未有邦友留言

立即登入留言