Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > Mobile > Mobile Forum > รบกวนช่วยดู Code เกี่ยวกับ Android Google Map API V2 MySQL


[Mobile] รบกวนช่วยดู Code เกี่ยวกับ Android Google Map API V2 MySQL

 
Topic : 125029



โพสกระทู้ ( 2 )
บทความ ( 0 )



สถานะออฟไลน์



ผมต้องการ add marker บน map โดยดึงข้อมูลจาก database แต่พอรันแล้วมัน errer ไม่รู้ผิดตรงไหนยังไงอ่ะครับ เลยอยากจะรบกวนผู้เชี่ยวชาญ ช่วยชี้แนะส่วนที่ผิดพลาด และแนวทางการแก้ไขครับ ขอบคุณครับ

Code (Android-Java)


ไฟล์ JAVA MainActivity

Code (Java)
001.package in.wptrafficanalyzer.locationmarkermysql;
002. 
003.import java.io.BufferedReader;
004.import java.io.IOException;
005.import java.io.InputStream;
006.import java.io.InputStreamReader;
007.import java.io.OutputStreamWriter;
008.import java.net.HttpURLConnection;
009.import java.net.MalformedURLException;
010.import java.net.URL;
011.import java.util.HashMap;
012.import java.util.List;
013. 
014.import org.json.JSONException;
015.import org.json.JSONObject;
016. 
017.import android.content.pm.PackageManager;
018.import android.os.AsyncTask;
019.import android.os.Bundle;
020.import android.support.v4.app.ActivityCompat;
021.import android.support.v4.app.FragmentActivity;
022.import android.view.Menu;
023. 
024.import com.google.android.gms.maps.GoogleMap;
025.import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
026.import com.google.android.gms.maps.OnMapReadyCallback;
027.import com.google.android.gms.maps.SupportMapFragment;
028.import com.google.android.gms.maps.model.LatLng;
029.import com.google.android.gms.maps.model.MarkerOptions;
030. 
031.public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
032. 
033.    GoogleMap mGoogleMap;
034. 
035.    @Override
036.    protected void onCreate(Bundle savedInstanceState) {
037.        super.onCreate(savedInstanceState);
038.        setContentView(R.layout.activity_main);
039. 
040.        // Getting reference to SupportMapFragment
041.        SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager()
042.                .findFragmentById(R.id.map);
043. 
044.        // Creating GoogleMap from SupportMapFragment
045.        fragment.getMapAsync(this);
046. 
047.        // Enabling MyLocation button for the Google Map
048.        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
049.            // TODO: Consider calling
050.            //    ActivityCompat#requestPermissions
051.            // here to request the missing permissions, and then overriding
052.            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
053.            //                                          int[] grantResults)
054.            // to handle the case where the user grants the permission. See the documentation
055.            // for ActivityCompat#requestPermissions for more details.
056.            return;
057.        }
058.        mGoogleMap.setMyLocationEnabled(true);
059.         
060.        // Setting OnClickEvent listener for the GoogleMap
061.        mGoogleMap.setOnMapClickListener(new OnMapClickListener() {
062.            @Override
063.            public void onMapClick(LatLng latlng) {
064.                addMarker(latlng);
065.                sendToServer(latlng);
066.            }
067.        });
068.         
069.        // Starting locations retrieve task
070.        new RetrieveTask().execute();
071.         
072.    }
073. 
074.    // Adding marker on the GoogleMaps
075.    private void addMarker(LatLng latlng) {
076.        MarkerOptions markerOptions = new MarkerOptions();
077.        markerOptions.position(latlng);
078.        markerOptions.title(latlng.latitude + "," + latlng.longitude);
079.        mGoogleMap.addMarker(markerOptions);
080.    }
081. 
082.    // Invoking background thread to store the touched location in Remove MySQL server
083.    private void sendToServer(LatLng latlng) {
084.        new SaveTask().execute(latlng);
085.    }
086. 
087.    @Override
088.    public void onMapReady(GoogleMap googleMap) {
089.        mGoogleMap = googleMap;
090.    }
091. 
092. 
093.    // Background thread to save the location in remove MySQL server
094.    private class SaveTask extends AsyncTask<LatLng, Void, Void> {
095.        @Override
096.        protected Void doInBackground(LatLng... params) {
097.            String lat = Double.toString(params[0].latitude);
098.            String lng = Double.toString(params[0].longitude);
099.            String strUrl = "http://songkhlazoo.esy.es/location_marker_mysql/save.php";
100.            URL url = null;
101.            try {
102.                url = new URL(strUrl);
103. 
104.                HttpURLConnection connection = (HttpURLConnection) url
105.                        .openConnection();
106.                connection.setRequestMethod("POST");
107.                connection.setDoOutput(true);
108.                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
109.                        connection.getOutputStream());
110. 
111.                outputStreamWriter.write("lat=" + lat + "&lng="+lng);              
112.                outputStreamWriter.flush();
113.                outputStreamWriter.close();
114.                 
115.                InputStream iStream = connection.getInputStream();
116.                BufferedReader reader = new BufferedReader(new
117.                InputStreamReader(iStream));
118.                 
119.                StringBuffer sb = new StringBuffer();
120.                 
121.                String line = "";
122.                 
123.                while( (line = reader.readLine()) != null){
124.                    sb.append(line);
125.                }
126. 
127.                reader.close();
128.                iStream.close();
129.                             
130. 
131.            } catch (MalformedURLException e) {
132.                e.printStackTrace();
133.            } catch (IOException e) {
134.                e.printStackTrace();
135.            }
136. 
137.            return null;
138.        }
139. 
140.    }
141.     
142.    // Background task to retrieve locations from remote mysql server
143.    private class RetrieveTask extends AsyncTask<Void, Void, String>{
144. 
145.        @Override
146.        protected String doInBackground(Void... params) {
147.            String strUrl = "http://songkhlazoo.esy.es/location_marker_mysql/retrieve.php";
148.            URL url = null;
149.            StringBuffer sb = new StringBuffer();
150.            try {
151.                url = new URL(strUrl);
152.                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
153.                connection.connect();
154.                InputStream iStream = connection.getInputStream();             
155.                BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));        
156.                String line = "";              
157.                while( (line = reader.readLine()) != null){
158.                    sb.append(line);
159.                }
160. 
161.                reader.close();
162.                iStream.close();                           
163. 
164.            } catch (MalformedURLException e) {
165.                e.printStackTrace();
166.            } catch (IOException e) {
167.                e.printStackTrace();
168.            }      
169.            return sb.toString();
170.        }
171.         
172.        @Override
173.        protected void onPostExecute(String result) {          
174.            super.onPostExecute(result);
175.            new ParserTask().execute(result);
176.        }
177.         
178.    }
179.     
180.    // Background thread to parse the JSON data retrieved from MySQL server
181.    private class ParserTask extends AsyncTask<String, Void, List<HashMap<String, String>>>{
182.        @Override
183.        protected List<HashMap<String,String>> doInBackground(String... params) {
184.            MarkerJSONParser markerParser = new MarkerJSONParser();
185.            JSONObject json = null;
186.            try {
187.                json = new JSONObject(params[0]);
188.            } catch (JSONException e) {
189.                e.printStackTrace();
190.            }
191.            List<HashMap<String, String>> markersList = markerParser.parse(json);
192.            return markersList;
193.        }
194.         
195.        @Override
196.        protected void onPostExecute(List<HashMap<String, String>> result) {
197.            for(int i=0; i<result.size();i++){
198.                HashMap<String, String> marker = result.get(i);
199.                LatLng latlng = new LatLng(Double.parseDouble(marker.get("lat")), Double.parseDouble(marker.get("lng")));
200.                addMarker(latlng);
201.            }
202.        }
203.    }
204. 
205.    @Override
206.    public boolean onCreateOptionsMenu(Menu menu) {
207.        // Inflate the menu; this adds items to the action bar if it is present.
208.        getMenuInflater().inflate(R.menu.main, menu);
209.        return true;
210.    }
211.}



ไฟล์ JAVA MarkerJSONParser

Code (Java)
01.package in.wptrafficanalyzer.locationmarkermysql;
02. 
03.import java.util.ArrayList;
04.import java.util.HashMap;
05.import java.util.List;
06. 
07.import org.json.JSONArray;
08.import org.json.JSONException;
09.import org.json.JSONObject;
10. 
11.public class MarkerJSONParser {
12.     
13.    /** Receives a JSONObject and returns a list */
14.    public List<HashMap<String,String>> parse(JSONObject jObject){     
15.         
16.        JSONArray jMarkers = null;
17.        try {          
18.            /** Retrieves all the elements in the 'markers' array */
19.            jMarkers = jObject.getJSONArray("markers");
20.        } catch (JSONException e) {
21.            e.printStackTrace();
22.        }
23.        /** Invoking getMarkers with the array of json object
24.         * where each json object represent a marker
25.         */
26.        return getMarkers(jMarkers);
27.    }
28.     
29.     
30.    private List<HashMap<String, String>> getMarkers(JSONArray jMarkers){
31.        int markersCount = jMarkers.length();
32.        List<HashMap<String, String>> markersList = new ArrayList<HashMap<String,String>>();
33.        HashMap<String, String> marker = null;   
34. 
35.        /** Taking each marker, parses and adds to list object */
36.        for(int i=0; i<markersCount;i++){
37.            try {
38.                /** Call getMarker with marker JSON object to parse the marker */
39.                marker = getMarker((JSONObject)jMarkers.get(i));
40.                markersList.add(marker);
41.            }catch (JSONException e){
42.                e.printStackTrace();
43.            }
44.        }
45.         
46.        return markersList;
47.    }
48.     
49.    /** Parsing the Marker JSON object */
50.    private HashMap<String, String> getMarker(JSONObject jMarker){
51. 
52.        HashMap<String, String> marker = new HashMap<String, String>();
53.        String lat = "-NA-";
54.        String lng ="-NA-";
55.                         
56.         
57.        try {
58.            // Extracting latitude, if available
59.            if(!jMarker.isNull("lat")){
60.                lat = jMarker.getString("lat");
61.            }
62.             
63.            // Extracting longitude, if available
64.            if(!jMarker.isNull("lng")){
65.                lng = jMarker.getString("lng");
66.            }                  
67.             
68.            marker.put("lat", lat);
69.            marker.put("lng", lng);        
70.             
71.        } catch (JSONException e) {        
72.            e.printStackTrace();
73.        }      
74.        return marker;
75.    }
76.}



แจ้งแตือน errer


Code
10-20 03:47:57.495 11441-11441/in.wptrafficanalyzer.locationmarkermysql E/MPlugin: Unsupported class: com.mediatek.common.telephony.IOnlyOwnerSimSupport
10-20 03:47:58.246 11441-11441/in.wptrafficanalyzer.locationmarkermysql E/AndroidRuntime: FATAL EXCEPTION: main
Process: in.wptrafficanalyzer.locationmarkermysql, PID: 11441
java.lang.RuntimeException: Unable to start activity ComponentInfo{in.wptrafficanalyzer.locationmarkermysql/in.wptrafficanalyzer.locationmarkermysql.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' on a null object reference
at in.wptrafficanalyzer.locationmarkermysql.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:6100)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601) 
at android.app.ActivityThread.access$800(ActivityThread.java:178) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5637) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)



aaa 



Tag : Mobile, Android

Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-10-20 04:02:06 By : dueraso View : 1521 Reply : 1
 

 

No. 1



โพสกระทู้ ( 74,059 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Quote:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms


จาก Error มีค่า Null แต่ไม่รู้ว่าตรงไหน จะต้อง Debug หาครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-20 17:43:27 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนช่วยดู Code เกี่ยวกับ Android Google Map API V2 MySQL
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)





ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่