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.
041.
SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager()
042.
.findFragmentById(R.id.map);
043.
044.
045.
fragment.getMapAsync(
this
);
046.
047.
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.
050.
051.
052.
053.
054.
055.
056.
return
;
057.
}
058.
mGoogleMap.setMyLocationEnabled(
true
);
059.
060.
061.
mGoogleMap.setOnMapClickListener(
new
OnMapClickListener() {
062.
@Override
063.
public
void
onMapClick(LatLng latlng) {
064.
addMarker(latlng);
065.
sendToServer(latlng);
066.
}
067.
});
068.
069.
070.
new
RetrieveTask().execute();
071.
072.
}
073.
074.
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.
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.
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);
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.
143.
private
class
RetrieveTask
extends
AsyncTask<Void, Void, String>{
144.
145.
@Override
146.
protected
String doInBackground(Void... params) {
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.
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.
208.
getMenuInflater().inflate(R.menu.main, menu);
209.
return
true
;
210.
}
211.
}