01 กันยายน 2556

[Android Code] การใช้งาน Google Place API ค้นหาข้อมูลสถานที่


        บทความนี้เลิกใช้แล้ว เพราะว่าเจ้าของบล็อกได้ทำไลบรารีใหม่สำหรับ Google Place API แทนแล้ว ซึ่งใช้งานสะดวกกว่าบทความนี้ สามารถดูได้ที่ [Android Code] GoogleDirectionAndPlaceLibrary ทางเลือกง่ายๆสำหรับชาว Google Maps

************************************************************

        กลับมาอีกครั้ง กับบทความเกี่ยวกับ Google Maps ที่รอคอยกัน อยู่ๆเจ้าของบล็อกก็นึกครึ้มอยากจะทำให้เสร็จๆไปซะที  เพราะดองโค๊ดไว้นานมากแล้ว (ทำเสร็จไว้นานแล้วล่ะ)

        คราวนี้ก็ถึงคราของบทความการใช้งาน Google Place API ซึ่งเป็น API สำหรับค้นหาข้อมูลสถานที่บน Google Maps นั่นเอง


        สำหรับผู้ที่หลงเข้ามาอ่านที่ทำแอปพลิเคชันเกี่ยวกับ Google Maps แล้ว ส่วนมากก็ถามเจ้าของบล็อกเยอะอยู่เช่นกันกับการค้นหาสถานที่บนแผนที่ ซึ่งจะต้องใช้ Google Place API เข้ามาร่วมกับ Google Maps อีกที

        โดยการใช้งาน Googla Place API ก็เหมือนๆ Google Direction API นั่นแหละ คือส่งคำร้องขอข้อมูลในรูปของ HTTP แล้วรับข้อมูลในรูป XML หรือ JSON บทความเจ้าของบล็อกจะรับข้อมูลเป็น XML นะ ด้วยความเคยชิน เพราะงั้นผู้ที่หลงเข้ามาอ่านที่จะทำเป็น JSON ก็ขอโทษด้วยนะจ๊ะ แต่จริงๆแล้วแตกต่างกันแค่รูปแบบข้อมูลที่รับมานั่นแหละ อื่นๆก็เหมือนกัน

        Google Place API จะมีรูปแบบคำร้องขอแบ่งออกเป็นดังนี้

                • Place Searches แสดงรายชื่อสถานที่โดยอิงจากตำแหน่งผู้ใช้หรือคีย์เวิร์ด
                • Place Details แสดงข้อมูลของสถานที่นั้นๆ รวมไปถึงความคิดเห็นผู้ใช้อื่น
                • Place Actions เข้าถึงฐานข้อมูลเพื่อเพิ่ม/ลบสถานที่หรือบันทึกอีเว้นท์ ณ ที่นั้น
                • Place Photos แสดงภาพสถานที่นั้นๆบน Google Maps
                • Places Autocomplete สำหรับแสดงคำช่วยในการค้นหาสถานที่
                • Query Autocomplete วิเคราะห์คีย์เวิร์ดค้นหาโดยอิงจากข้อมูล Google Maps

        โดยบทความนี้ขอพูดถึง Place Searches นะ เพราะส่วนใหญ่จะใช้อันนี้กัน


        สำหรับ Place Searches ก็จะแยกย่อยออกไปอีก โดยประกอบไปด้วย

                • Nearby Search ค้นหาสถานที่ต่างๆที่อยู่รอบๆพิกัดที่กำหนดไว้
                • Text Search ค้นหาสถานที่จากคีย์เวิร์ดที่กำหนดไว้
                • Radar Search ค้นหาสถานที่ได้มากสุดถึง 200 ที่ แต่ข้อมูลสถานที่จะน้อย


        ก่อนจะพูดถึงการใช้งาน Place Searches จะต้องพูดถึงการขอ API key ก่อน เพราะการขอใช้ Google Place API จะต้องขออนุญาตใน Google API Console ซึ่งจะต่างจาก Google Direction API ที่ไม่จำเป็นของต้อง API Key โดยมีขั้นตอนในการขออนุฐาตใช้งาน Google Place API ดังนี้

        • Log in ที่ https://code.google.com/apis/console/ ในกรณีที่พึ่งเคยเข้าใช้งานให้ทำกดที่ปุ่ม Create project.... แล้วจะให้ตั้งชื่อ Project ตั้งชื่ออะไรก็ได้ตามต้องการ



        • เมื่อเข้ามาแล้ว ที่ช่องซ้ายมือให้เลือกที่ Services



        • กดเปิดที่ Place API เพื่อเปิดใช้งานจะเห็นว่าสามารถใช้งานได้แค่ 1,000 ครั้งต่อวัน (อยากได้เยอะๆก็ต้องเสียเงินนั่นเอง)



        • จะมีหน้าต่างให้ใส่รายละเอียดขององค์กรลงไป ก็ให้ใส่ชื่อและที่อยู่เว็ปไซต์ลงไปให้เรียบร้อย



        • เมื่อ Place API เป็น ON ก็เป็นอันเสร็จเรียบร้อยแล้ว แต่ยังไม่หมดนะ



        • ให้มาที่หน้า API Access (กดที่ช่องซ้ายมือ) จะเห็นว่าที่ช่อง Key for browser apps (with referers) มีช่อง API Key อยู่ ให้นำ API Key ที่อยู่ในช่องนี้ไปใช้งานได้เลย



        สำหรับการรับข้อมูล xml จะไม่ขออธิบายนะ เพราะเคยอธิบายไปแล้ว [Android Code] แสดงเส้นทาง Direction บน Google Maps Android API v2 [ตอน 1]

        โดย Place Search ที่จะทำนี้ ก็ไม่ได้ให้เขียนกันเองอยู่แล้วล่ะ เจ้าของบล็อกทำเป็นคลาสไว้ให้เสร็จเรียบร้อยแล้ว ใช้งานได้เลย โดยจะต้องกำหนดพารามิเตอร์ที่ต้องการให้กับคำสั่งของคลาสนี้ โดยค่าที่ส่งกลับมาให้จะอยู่ในรูปของ ArrayList<ContentValues> ก่อนอื่นมาดูการเริ่มใช้งานก่อน โดยคลาสจะมีชื่อว่า GooglePlaceSearch
GooglePlace gp = new GooglePlace(api_key);
        ที่ api_key ให้ใส่ API Key ที่ได้มาจาก Google API Console


        อีกอย่างก่อนจะพูดถึงโค๊ดหลักก็คือ Type ของสถานที่หรือประเภทของสถานที่นั่นเอง ซึ่งประกอบไปด้วยดังนี้



        สามารถระบุในพารามิเตอร์ type เพื่อค้นหาเฉพาะสถานที่ประเภทนั้นๆได้เลย ทีนี้ก็มาดูส่วนของโค๊ดในการค้นหาสถานที่แต่ละแบบกันต่อเลย


Nearby Search

        จะขอพูดถึงพารามิเตอร์ที่จะใช้ใน Place Search ของคลาสตัวนี้กันเลย เริ่มจาก Nearby Search ก่อน ซึ่งจะต้องกำหนดพารามิเตอร์ต่างๆดังนี้

        พารามิเตอร์ที่ต้องกำหนด

                Latitude : พิกัดละติจูดของจุดศูนย์กลางในการค้นหาสถานที่โดยรอบ
                Longitude : พิกัดลองติจูดของจุดศูนย์กลางในการค้นหาสถานที่โดยรอบ
                Radius : รัศมีในการค้นหาโดยรอบ หน่วยเป็นเมตร สูงสุด 50,00 เมตร
                Key : API Key ของผู้ที่หลงเข้ามาอ่านที่ไปขอจาก Google API Console


        พารามิเตอร์รอง (ไม่สำคัญ)

                Type : ประเภทของสถานที่ที่ต้องการค้นหา
                Language : ภาษาที่ต้องการให้แสดง (ถ้าไม่มีก็เป็น EN)
                Keyword : คีย์เวิร์ดเพื่อช่วยในการค้นหาสถานที่

ArrayList<ContentValues> data = gp.getNearBy(double latitude , double longitude, int radius, String type , String language, String keyword);
ArrayList<ContentValues> data = gp.getNearBy(double latitude , double longitude, int radius, String type , String language);
ArrayList<ContentValues> data = gp.getNearBy(double latitude , double longitude, int radius, String type);
ArrayList<ContentValues> data = gp.getNearBy(double latitude , double longitude, int radius);
        Overload Method ไว้ให้แล้วเลือกใช้อย่างใดอย่างหนึ่งได้ตามต้องการ

        สำหรับข้อมูลจะ Return กลับมาในรูป ArrayList<ContentValues> ก่อนอื่นพูดถึงคลาส ArrayList<ContentValues> ก่อน ไม่งั้นคงงงๆกัน คลาสนี้ก็คือ Content Values ที่อยู่ในรูปของ Array นั่นแหละ เพราะข้อมูลสถานที่นั้นๆ เจ้าของบล็อกจะเก็บใน Content Values เพราะจะต้องเก็บค่าต่างๆไว้ เช่น ชื่อ เบอร์โทร ที่อยู่ พิกัด และไอคอน โดยที่คีย์เวิร์ดของแต่ละค่าจะกำหนดไว้ดังนี้ 

                ชื่อสถานที่ : "Name" 
                เบอร์โทร : "PhoneNumber"
                ที่อยู่ : "Address"
                ละติจูด : "Latitude"
                ลองติจูด : "Longitude"
                ไอคอน : "Icon"

        ปกติแล้ว Content Values ที่ไม่ได้อยู่ในรูปของ Array จะดึงค่าออกมาดังนี้
String s = cv.getAsString("Keyword");
        ถ้าต้องการข้อมูลที่อยู่ของสถานที่ก็ให้กำหนดคีย์เวิร์ดเป็น "Address" ตัวแปร s ก็จะเป็นค่าที่อยู่ของสถานที่นั้นๆนั่นเอง

        คลาส GooglePlaceSearch ข้อมูลทุกตัวจะเป็น String เพื่อให้ง่ายต่อการใช้


        แต่ในทีนี้ เวลารับข้อมูลสถานที่จาก Place API นั้น ไม่ได้มีแค่สถานที่เดียว เพราะ Place API จะส่งมาหลายๆสถานที่ ขึ้นอยู่กับว่าหาเจอมากน้อยแค่ไหน ดังนั้นจึงต้องเก็บ Content Values ให้อยู่ในรูป Array อีกทีหนึ่งนั่นเอง

        ดังนั้นถ้าเจ้าของบล็อกต้องการดึงสถานที่ที่รับมาจาก Place API จะเป็น
String s = cv.get(position).getAsString("Keyword");

        position ก็คือลำดับของสมาชิกใน Array นั้นๆ สมมติว่าใช้ Place Search แล้วรับข้อมูลสถานที่มาได้ 3 แห่ง ดังนั้น position ก็จะเป็น 0 ถึง 2  ระบุตามปกติของ Array เลยนั่นแหละ อยากได้สถานที่แรกก็ใส่ 0 แล้วกำหนดคีย์เวิร์ดว่าจะดึงข้อมูลอะไร
String name = data.get(i).getAsString(GooglePlaceSearch.NAME); String phone = data.get(i).getAsString(GooglePlaceSearch.PHONENUMBER); String address = arr_cv.get(i).getAsString(GooglePlaceSearch.ADDRESS); String lat = data.get(i).getAsString(GooglePlaceSearch.LATITUDE); String lon = data.get(i).getAsString(GooglePlaceSearch.LONGITUDE); String icon = data.get(i).getAsString(GooglePlaceSearch.ICON);

        อ้าว ทำไมคีย์เวิร์ดกำหนดแบบนั้นล่ะ แล้วที่บอกไว้หายไปไหน? จริงๆไม่ได้หายไปไหนหรอก แต่ว่าเจ้าของบล็อกประกาศเป็นตัวแปรแล้ว ประกาศไว้ให้เรียบร้อยในคลาส GooglePlaceSearch ดังนั้นก็เรียกใช้ได้เลย
public final static String NAME = "Name"; public final static String ADDRESS = "Address"; public final static String LATITUDE = "Latitude"; public final static String LONGITUDE = "Longitude"; public final static String ICON = "Icon"; public final static String PHONENUMBER = "PhoneNumber";

        และในบางครั้งใช่ว่าจะค้นหาแล้วต้องเจอสถานที่เสมอไปจึงต้องมีการแจ้งสถานะการค้นหาด้วยว่าเป็นยังไงบ้าง ซึ่งเจ้าของบล็อกก็ได้สร้างฟังก์ชันให้เรียกใช้เรียบร้อยแล้ว
String status = gp.getDataStatus();
        หมายเหตุ - คำสั่งนี้เรียกใช้หลังจากใช้คำสั่ง getNearBy นะ

        ฟังก์ชันนี้ก็จะ Return เป็น String ออกมาดังนี้

                "OK" ค้นหาสถานที่ได้ตามปกติ
                "ZERO_RESULTS" ไม่มีสถานที่ในบริเวรที่กำหนด
                "OVER_QUERY_LIMIT" โควต้า Place API หมด (1 พันครั้งต่อวัน)
                "REQUEST_DENIED" คำร้องขอไม่ผ่าน
                "INVALID_REQUEST" พารามิเตอร์ไม่ครบ


        ทีนี้ยกตัวอย่างการใช้งานจริงๆดีกว่า โดยเจ้าของบล็อกจะค้นหาร้านอาหาร ระยะรัศมี 1,000 เมตร รอบๆพิกัด 13.730354, 100.569701 (BTS พร้อมพงษ์) และมีคีย์เวิร์ดว่า "japan restaurant food" โดยแสดงผลเป็นภาษาไทย
public class Main extends Activity { String api_key = "your_api_key"; double latitude = 13.730354; double longitude = 100.569701; int radius = 1000; String type = "food"; String language = "th"; String keyword = "japan restaurant food"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GooglePlaceSearch gp = new GooglePlaceSearch(api_key); ArrayList<ContentValues> arr_cv = gp.getNearBy(latitude , longitude, radius, type, language, keyword); ArrayList<String> arr_list = new ArrayList<String>(); if(arr_cv != null) { for(int i = 0 ; i < arr_cv.size() ; i++) { String name = arr_cv.get(i).getAsString( GooglePlaceSearch.NAME); String phone = arr_cv.get(i).getAsString( GooglePlaceSearch.PHONENUMBER); String address = arr_cv.get(i).getAsString( GooglePlaceSearch.ADDRESS); String lat = arr_cv.get(i).getAsString( GooglePlaceSearch.LATITUDE); String lon = arr_cv.get(i).getAsString( GooglePlaceSearch.LONGITUDE); String icon = arr_cv.get(i).getAsString( GooglePlaceSearch.ICON); arr_list.add("Name : " + name + "\n" + "Phone : " + phone + "\n" + "Address : " + address + "\n" + "Latitude : " + lat + "\n" + "Longitude : " + lon + "\n" + "Icon : " + icon); } TextView txt = (TextView)findViewById(R.id.textView1); txt.setText("Data " + gp.getDataStatus()); ArrayAdapter adapter = new ArrayAdapter(Main.this , android.R.layout.simple_list_item_1 , arr_list); ListView list = (ListView)findViewById(R.id.listView1); list.setAdapter(adapter); } } }
        จากตัวอย่างนี้ก็จะแสดงสถานะ Return ให้เห็นบน Text View ส่วนข้อมูลสถานที่ที่ค้นหาได้ก็จะแสดงใน List View 


        ซึ่งตัวอย่างนี้เป็นการแสดงข้อมูลแบบดิบๆ เวลาเอาไปใช้งานก็จัดการให้เรียบร้อยอีกทีนึง



Text Search

        สำหรับ Text Search จะต่างจาก Nearby Seach ตรงที่ Nearby Search จะต้องกำหนดพิกัดเพื่อค้นหาโดยรอบ โดยมีคีย์เวิร์ดเป็นพารามิเตอร์รอง จะใส่หรือไม่ก็ได้ แต่ Text Search จะเป็นการค้นหาด้วยคีย์เวิร์ด โดยมีพิกัดเป็นพารามิเตอร์รอง จะใส่หรือไม่ก็ได้ แต่เมื่อใส่ครบหมด ทั้งคู่ก็เหมือนกันอยู่ดีนั่นแหละ ถึงกระนั้นก็เหมาะแก่การค้นหาด้วยคีย์เวิร์ดเป็นหลัก

        สำหรับการใช้งานก็เหมือนๆกันเลยต่างกันที่พารามิเตอร์
ArrayList<ContentValues> data = gp.getTextSearch(String keyword , String type, boolean opennow, String language , double latitude, double longitude, int radius);
ArrayList<ContentValues> data = gp.getTextSearch(String keyword , String type, boolean opennow, String language , double latitude, double longitude, int radius);
ArrayList<ContentValues> data = gp.getTextSearch(String keyword , String type, boolean opennow, String language);
ArrayList<ContentValues> data = gp.getTextSearch(String keyword , String type);
ArrayList<ContentValues> data = gp.getTextSearch(String keyword);
        จะเห็นว่ามีเพิ่มมาอย่างนึงคือ opennow ก็คือกำหนดได้ด้วยว่าจะให้แสดงเฉพาะสถานที่ที่เปิดบริการอยู่ในเวลานั้นๆด้วยหรือป่าว สมมติผู้ใช้ค้นหาร้านอาหารตอนสองทุ่ม แล้วตัวแปรนี้เป็น True ก็จะได้รายชื่อของร้านอาหารที่กำลังเปิด ณ ตอนนั้นอยู่นั่นเอง ซึ่งจริงๆ Nearby Search ก็มีพารามิเตอร์นี้ แต่เจ้าของบล็อกไม่ได้ใส่ไว้

        โดยข้อมูลที่ Return กลับมาก็จะมีดังนี้
public final static String NAME = "Name"; public final static String ADDRESS = "Address"; public final static String LATITUDE = "Latitude"; public final static String LONGITUDE = "Longitude"; public final static String ICON = "Icon"; public final static String OPENNOW = "OpenNow"; public final static String PHOTO = "Photo"; public final static String PHONENUMBER = "PhoneNumber";

String name = data.get(i).getAsString(GooglePlaceSearch.NAME); String phone = data.get(i).getAsString(GooglePlaceSearch.PHONENUMBER); String address = data.get(i).getAsString(GooglePlaceSearch.ADDRESS); String lat = data.get(i).getAsString(GooglePlaceSearch.LATITUDE); String lon = data.get(i).getAsString(GooglePlaceSearch.LONGITUDE); String icon = data.get(i).getAsString(GooglePlaceSearch.ICON); String opennow = data.get(i).getAsString(GooglePlaceSearch.OPENNOW); String photo = data.get(i).getAsString(GooglePlaceSearch.PHOTO);
        จะเห็นว่ามี Photo เพิ่มเข้ามา ซึ่งเป็นภาพของสถานที่นั้นๆนั่นเอง โดยข้อมูลของ Photo ที่ได้จะเป็น String เข้ารหัสมาก่อน

        ถ้าอยากได้ภาพออกมาเป็นคลาส Bitmap ให้ใช้คำสั่งต่อดังนี้
Bitmap bm = gp.getReferencePhoto(photo, 400, 300);
        โดย 400 คือความกว้างของภาพสูงสุด และ 300 คือความสูงของภาพสูงสุด กำหนดขนาดได้สูงสุดที่ 1600 ทั้งความกว้างและความสูง หน่วยเป็นพิกเซล ก็สร้าง Image View แล้วใช้คำสั่ง setImageBitmap(bm) ก็จะแสดงภาพให้เห็น


         สมมติว่าเจ้าของบล็อกลองค้นหาว่า "เบอร์เกอร์คิง"
public class Main extends Activity { String api_key= "AIzaSyDQ6mA6vUHD3cMNqDoblES6q3dFHzXXXXX"; String keyword = "เบอร์เกอร์คิง"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GooglePlaceSearch gp = new GooglePlaceSearch(api_key); ArrayList<ContentValues> arr_cv = gp.getTextSearch(keyword); ArrayList<String> arr_list = new ArrayList<String>(); if(arr_cv != null) { for(int i = 0 ; i < arr_cv.size() ; i++) { String name = arr_cv.get(i).getAsString( GooglePlaceSearch.NAME); String phone = arr_cv.get(i).getAsString( GooglePlaceSearch.PHONENUMBER); String address = arr_cv.get(i).getAsString( GooglePlaceSearch.ADDRESS); String lat = arr_cv.get(i).getAsString( GooglePlaceSearch.LATITUDE); String lon = arr_cv.get(i).getAsString( GooglePlaceSearch.LONGITUDE); String icon = arr_cv.get(i).getAsString( GooglePlaceSearch.ICON); String opennow = arr_cv.get(i).getAsString( GooglePlaceSearch.OPENNOW); String photo = arr_cv.get(i).getAsString( GooglePlaceSearch.PHOTO); arr_list.add("Name : " + name + "\n" + "Phone : " + phone + "\n" + "Address : " + address + "\n" + "Latitude : " + lat + "\n" + "Longitude : " + lon + "\n" + "Icon : " + icon + "\n" + "Open Now : " + opennow + "\n" + "Photo : " + photo); } } TextView textView = (TextView)findViewById(R.id.textView1); textView.setText("Data " + gp.getDataStatus()); ArrayAdapter adapter = new ArrayAdapter(Main.this , android.R.layout.simple_list_item_1, arr_list); ListView listView = (ListView)findViewById(R.id.listView1); listView.setAdapter(adapter); } }


        ซึ่งตัวอย่างนี้เป็นการแสดงข้อมูลแบบดิบๆ เวลาเอาไปใช้งานก็จัดการให้เรียบร้อยอีกทีนึง



Radar Search

        สำหรับ Radar Search จะเป็นการหาสถานที่แบบคร่าวๆที่เน้นจำนวนเป็นหลัก เพราะ Nearby Search กับ Text Search จะมีข้อจำกัดเรื่องจำนวนสถานที่สูงสุดที่ส่งกลับมาได้ ซึ่ง Radar Search จะแสดงได้สูงสุดถึง 2,000 แห่ง แต่ก็ต้องแลกกับข้อมูลรายละเอียดของสถานที่ที่น้อยอ ดังนั้นจึงเหมาะสำหรับการหาสถานที่โดยคร่าวๆมากกว่า

        พารามิเตอร์หลักๆจะเหมือนกับ Nearby Search ซึ่งก็ตามความหมายของ Radar นั่นแหละ ดังนั้นจึงต้องระบุพิกัดกับรัศมีในการค้นหา

        โดยมีการใช้งานดังนี้
ArrayList<ContentValues> data = gp.getRadarSearch(double latitude , double longitude, int radius, String type , String language, boolean opennow, String keyword);
ArrayList<ContentValues> data = gp.getRadarSearch(double latitude , double longitude, int radius, String type , String language, boolean opennow);
ArrayList<ContentValues> data = gp.getRadarSearch(double latitude , double longitude, int radius, String type , String language);
ArrayList<ContentValues> data = gp.getRadarSearch(double latitude , double longitude, int radius, String type);
ArrayList<ContentValues> data = gp.getRadarSearch(double latitude , double longitude, int radius);

        รูปแบบคำสั่งก็คงไม่ต้องอธิบายอะไรมาก เพราะเหมือนกับ  Nearby Search นั่นแหละ

        โดย Radar Search จะมีข้อมูลที่ส่งกลับมาดังนี้
public final static String NAME = "Name"; public final static String ADDRESS = "Address"; public final static String LATITUDE = "Latitude"; public final static String LONGITUDE = "Longitude"; public final static String ICON = "Icon"; public final static String PHONENUMBER = "PhoneNumber";

String name = arr_cv.get(i).getAsString(GooglePlaceSearch.NAME); String phone = arr_cv.get(i).getAsString(GooglePlaceSearch.PHONENUMBER); String address = arr_cv.get(i).getAsString(GooglePlaceSearch.ADDRESS); String lat = arr_cv.get(i).getAsString(GooglePlaceSearch.LATITUDE); String lon = arr_cv.get(i).getAsString(GooglePlaceSearch.LONGITUDE); String icon = arr_cv.get(i).getAsString(GooglePlaceSearch.ICON);


        สมมติว่าเจ้าของบล็อกลองค้นหา "สถานีตำรวจ" ที่อยู่รอบๆพิกัด 13.745443, 100.534254 (BTS สยาม) ระยะ 10,000 เมตร โดยกำหนด Type เป็น "police"
public class Main extends Activity { String api_key = "AIzaSyDQ6mA6vUHD3cMNqDoblES6q3dFHzXXXXX"; double latitude = 13.745443; double longitude = 100.534254; int radius = 10000; String type = "police"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GooglePlaceSearch gp = new GooglePlaceSearch(api_key); ArrayList<ContentValues> arr_cv = gp.getRadarSearch(latitude , longitude, radius, type); ArrayList<String> arr_list = new ArrayList<String>(); if(arr_cv != null) { for(int i = 0 ; i < arr_cv.size() ; i++) { String name = arr_cv.get(i).getAsString( GooglePlaceSearch.NAME); String phone = arr_cv.get(i).getAsString( GooglePlaceSearch.PHONENUMBER); String address = arr_cv.get(i).getAsString( GooglePlaceSearch.ADDRESS); String lat = arr_cv.get(i).getAsString( GooglePlaceSearch.LATITUDE); String lon = arr_cv.get(i).getAsString( GooglePlaceSearch.LONGITUDE); String icon = arr_cv.get(i).getAsString( GooglePlaceSearch.ICON); arr_list.add("\nName : " + name + "\n" + "Phone : " + phone + "\n" + "Address : " + address + "\n" + "Latitude : " + lat + "\n" + "Longitude : " + lon + "\n" + "Icon : " + icon + "\n"); } } TextView textView = (TextView)findViewById(R.id.textView1); textView.setText("Data " + gp.getDataStatus()); ArrayAdapter adapter = new ArrayAdapter(Main.this , android.R.layout.simple_list_item_1, arr_list); ListView listView = (ListView)findViewById(R.id.listView1); listView.setAdapter(adapter); } }


        หมดล่ะกับตัวอย่างการใช้งาน Place Search ทั้งสามแบบ แต่เจ้าของบล็อกก็ได้รวมคำสั่งทั้ง 3 แบบนี้ให้ผู้ที่หลงเข้ามาอ่านไปดูกัน


Main.java




        จะเห็นว่ามีตัวอย่างโค๊ดทั้งสามแบบ ลองเอาไปศึกษาดูได้


main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="10dp" android:text="TextView" /> </RelativeLayout>


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.akexorcist.googleplacesearch" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="app.akexorcist.googleplacesearch.Main" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

        สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการไฟล์ตัวอย่างสามารถดาวน์โหลดได้ที่ Google Place Search [Google Drive]


        นั่งทำทีนึงนานเหมือนกันแฮะ = =




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium