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,027

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



 

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

 



Topic : 125029



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



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




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

Code (Android-Java)


ไฟล์ JAVA MainActivity

Code (Java)
package in.wptrafficanalyzer.locationmarkermysql;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

	GoogleMap mGoogleMap;

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

		// Getting reference to SupportMapFragment
		SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager()
				.findFragmentById(R.id.map);

		// Creating GoogleMap from SupportMapFragment
		fragment.getMapAsync(this);

		// Enabling MyLocation button for the Google Map
		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) {
			// TODO: Consider calling
			//    ActivityCompat#requestPermissions
			// here to request the missing permissions, and then overriding
			//   public void onRequestPermissionsResult(int requestCode, String[] permissions,
			//                                          int[] grantResults)
			// to handle the case where the user grants the permission. See the documentation
			// for ActivityCompat#requestPermissions for more details.
			return;
		}
		mGoogleMap.setMyLocationEnabled(true);
		
		// Setting OnClickEvent listener for the GoogleMap
		mGoogleMap.setOnMapClickListener(new OnMapClickListener() {
			@Override
			public void onMapClick(LatLng latlng) {
				addMarker(latlng);
				sendToServer(latlng);
			}
		});
		
		// Starting locations retrieve task
		new RetrieveTask().execute();
		
	}

	// Adding marker on the GoogleMaps
	private void addMarker(LatLng latlng) {
		MarkerOptions markerOptions = new MarkerOptions();
		markerOptions.position(latlng);
		markerOptions.title(latlng.latitude + "," + latlng.longitude);
		mGoogleMap.addMarker(markerOptions);
	}

	// Invoking background thread to store the touched location in Remove MySQL server
	private void sendToServer(LatLng latlng) {
		new SaveTask().execute(latlng);
	}

	@Override
	public void onMapReady(GoogleMap googleMap) {
		mGoogleMap = googleMap;
	}


	// Background thread to save the location in remove MySQL server
	private class SaveTask extends AsyncTask<LatLng, Void, Void> {
		@Override
		protected Void doInBackground(LatLng... params) {
			String lat = Double.toString(params[0].latitude);
			String lng = Double.toString(params[0].longitude);
			String strUrl = "http://songkhlazoo.esy.es/location_marker_mysql/save.php";
			URL url = null;
			try {
				url = new URL(strUrl);

				HttpURLConnection connection = (HttpURLConnection) url
						.openConnection();
				connection.setRequestMethod("POST");
				connection.setDoOutput(true);
				OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
						connection.getOutputStream());

				outputStreamWriter.write("lat=" + lat + "&lng="+lng);				
				outputStreamWriter.flush();
				outputStreamWriter.close();
				
				InputStream iStream = connection.getInputStream();
				BufferedReader reader = new BufferedReader(new
				InputStreamReader(iStream));
				
				StringBuffer sb = new StringBuffer();
				
				String line = "";
				
				while( (line = reader.readLine()) != null){
					sb.append(line);
				}

				reader.close();
				iStream.close();
							

			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}

			return null;
		}

	}
	
	// Background task to retrieve locations from remote mysql server
	private class RetrieveTask extends AsyncTask<Void, Void, String>{

		@Override
		protected String doInBackground(Void... params) {
			String strUrl = "http://songkhlazoo.esy.es/location_marker_mysql/retrieve.php";
			URL url = null;
			StringBuffer sb = new StringBuffer();
			try {
				url = new URL(strUrl);
				HttpURLConnection connection = (HttpURLConnection) url.openConnection();
				connection.connect();
				InputStream iStream = connection.getInputStream();				
				BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));			
				String line = "";				
				while( (line = reader.readLine()) != null){
					sb.append(line);
				}

				reader.close();
				iStream.close();							

			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}		
			return sb.toString();
		}
		
		@Override
		protected void onPostExecute(String result) {			
			super.onPostExecute(result);
			new ParserTask().execute(result);
		}
		
	}
	
	// Background thread to parse the JSON data retrieved from MySQL server
	private class ParserTask extends AsyncTask<String, Void, List<HashMap<String, String>>>{
		@Override
		protected List<HashMap<String,String>> doInBackground(String... params) {
			MarkerJSONParser markerParser = new MarkerJSONParser();
			JSONObject json = null;
			try {
				json = new JSONObject(params[0]);
			} catch (JSONException e) {
				e.printStackTrace();
			}
			List<HashMap<String, String>> markersList = markerParser.parse(json);
			return markersList;
		}
		
		@Override
		protected void onPostExecute(List<HashMap<String, String>> result) {
			for(int i=0; i<result.size();i++){
				HashMap<String, String> marker = result.get(i);
				LatLng latlng = new LatLng(Double.parseDouble(marker.get("lat")), Double.parseDouble(marker.get("lng")));
				addMarker(latlng);
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}



ไฟล์ JAVA MarkerJSONParser

Code (Java)
package in.wptrafficanalyzer.locationmarkermysql;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MarkerJSONParser {
	
	/** Receives a JSONObject and returns a list */
	public List<HashMap<String,String>> parse(JSONObject jObject){		
		
		JSONArray jMarkers = null;
		try {			
			/** Retrieves all the elements in the 'markers' array */
			jMarkers = jObject.getJSONArray("markers");
		} catch (JSONException e) {
			e.printStackTrace();
		}
		/** Invoking getMarkers with the array of json object
		 * where each json object represent a marker
		 */
		return getMarkers(jMarkers);
	}
	
	
	private List<HashMap<String, String>> getMarkers(JSONArray jMarkers){
		int markersCount = jMarkers.length();
		List<HashMap<String, String>> markersList = new ArrayList<HashMap<String,String>>();
		HashMap<String, String> marker = null;	

		/** Taking each marker, parses and adds to list object */
		for(int i=0; i<markersCount;i++){
			try {
				/** Call getMarker with marker JSON object to parse the marker */
				marker = getMarker((JSONObject)jMarkers.get(i));
				markersList.add(marker);
			}catch (JSONException e){
				e.printStackTrace();
			}
		}
		
		return markersList;
	}
	
	/** Parsing the Marker JSON object */
	private HashMap<String, String> getMarker(JSONObject jMarker){

		HashMap<String, String> marker = new HashMap<String, String>();
		String lat = "-NA-";
		String lng ="-NA-";
						
		
		try {
			// Extracting latitude, if available
			if(!jMarker.isNull("lat")){
				lat = jMarker.getString("lat");
			}
			
			// Extracting longitude, if available
			if(!jMarker.isNull("lng")){
				lng = jMarker.getString("lng");
			}					
			
			marker.put("lat", lat);
			marker.put("lng", lng);			
			
		} catch (JSONException e) {			
			e.printStackTrace();
		}		
		return marker;
	}
}



แจ้งแตือน 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 : 1333 Reply : 1
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 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 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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