Android : How to use JsonUtil get infomation from server

สำหรับใครที่กำลังมองหาวิธีการดึงข้อมูลจากเซิร์ฟเวอร์ซึ่งมีหลายแนวทาง ไม่ว่าจะใช้ HttpConnect, JsonUtil, XML, etc. วันนี้มาแนะนำหนึ่งในทางเลือกคือ JsonUtil โดยแนวทางจะมีสองฝั่งต้องส่งและรับข้อมูลให้สัมพันธ์กัน ดังตัวอย่าง

1. ฝั่งเซิร์ฟเวอร์ (Server)

ฝั่งเซิร์ฟเวอร์เราก็ต้องตัดข้อมูลที่จะส่งพร้อมกับระบุหัวข้อของข้อมูล เช่น เราต้องการส่งข้อมูล
ชื่อ(name), นามสกุล(lname), อายุ(age) โดย query มาจากฐานข้อมูลในส่วนของเซิร์ฟเวอร์เราจะเตรียมโค้ดดังนี้

1.1 query code

$query=”select name,lname,age from tbl_account” ;

1.2 convert to json format

$res = mysql_query($query);
$total_records = mysql_num_rows($res);if($total_records >= 1){
while ($link = mysql_fetch_array($res, MYSQL_ASSOC)){
$set[‘jsonArray’][] = $link;
}
}
echo $val= str_replace(‘\\/’, ‘/’, json_encode($set));

Note: jsonArray เป็นชื่อ array ที่เราจะต้องกำหนดใน application เรากำหนดเองได้

ตัวอย่างข้อมูลแบบ 1 record ถ้ามีหลาย records ก็จะคั่นด้วย comma ไปเรื่อยๆ

{“jsonArray “:[{“name”:”surachai”,”lname”:”boonmakmak”,”age”:”24″}]}

2. ฝั่งแอปปลิเคชัน (Android Application)

ในส่วนของแอนดรอย์เราจะเพิ่มโค้ดดังนี้

2.1 รัน JsonUtil connect to server url

if (JsonUtils.isNetworkAvailable(this)) {
   String url = "http://www.myappserv.com/getacc.php;
   new MyTask().execute(url);
}

2.2 สร้าง class MyTask()

private class MyTask extends AsyncTask<String, Void, String> {
   @Override
   protected void onPreExecute() {
      super.onPreExecute();
   }

   @Override
   protected String doInBackground(String... params) {
      return JsonUtils.getJSONString(params[0]);
   }

   @Override
   protected void onPostExecute(String result) {
      super.onPostExecute(result);

      if (null == result || result.length() == 0) {
         showToast("No data!!!");
      } else {
         try {
            JSONObject mainJson = new JSONObject(result);
            JSONArray jsonArray = mainJson.getJSONArray('jsonArray');
            JSONObject objJson = null;
            for (int i = 0; i < jsonArray.length(); i++) {
            objJson = jsonArray.getJSONObject(i);

            // define variable
            String v_name = objJson.getString('name');
            String v_lname = objJson.getString('lname');
            String v_age = objJson.getString('age');
            }

         } catch (JSONException e) {
            e.printStackTrace();
         }

      }

   }
}

ตรงที่กำหนดเป็นตัวหนาชื่อฟิลด์จะต้องตรงกับที่เซิร์ฟเวอร์ส่งมา ทั้งชื่อ array (ในตัวอย่างคือ jsonArray) ชื่อฟิลด์ (ในตัวอย่างมี name, lname, age)

นอกจากนี้ในตัวอย่างเป็นการประกาศ String v_name, v_lname, v_age มารับค่า ซึ่งจะรับได้เพียงค่าเดียวคือค่าสุดท้ายโดยในตัวอย่างส่งมาเพียง 1 record เลยใช้ String รับ แต่ถ้ากรณีมีหลาย records จะต้องประกาศตัวแปรเป็น array แล้วรับค่ามาเก็บไว้ถึงจะได้ครบนะครับ

You may also like...