在MySQL中存储谷歌地图Android API V2标记位置-标题

在MySQL中存储谷歌地图Android API V2标记位置-标题,android,mysql,google-maps,Android,Mysql,Google Maps,我知道我正在冒被封锁的风险,但我已经在这上面很久了。嗯,我正常地在MySQL中存储Google Maps Android API V2标记位置,一切正常,问题是,我想把标题而不是纬度和经度放在上面。标题到标记,我尝试过使用字符串,但我得到的只是错误。代码如下,如果我得到这个问题的答案,我将在这里分享: public class MainActivity extends FragmentActivity { GoogleMap mGoogleMap; @Override

我知道我正在冒被封锁的风险,但我已经在这上面很久了。嗯,我正常地在MySQL中存储Google Maps Android API V2标记位置,一切正常,问题是,我想把标题而不是纬度和经度放在上面。标题到标记,我尝试过使用字符串,但我得到的只是错误。代码如下,如果我得到这个问题的答案,我将在这里分享:

public class MainActivity extends FragmentActivity {

    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
        mGoogleMap = fragment.getMap();

        // Enabling MyLocation button for the Google Map
        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);
    }


    // 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://192.168.0.106/pontos/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://192.168.0.106/pontos/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;
    }
}
public类MainActivity扩展了FragmentActivity{
谷歌地图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对SupportMapFragment的引用
SupportMapFragment片段=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
//从SupportMapFragment创建Google地图
mGoogleMap=fragment.getMap();
//为Google地图启用MyLocation按钮
mGoogleMap.setMyLocationEnabled(true);
//为Google地图设置OnClickEvent侦听器
setOnMapClickListener(新的OnMapClickListener()){
@凌驾
公共无效的点击(LatLng LatLng){
添加标记(latlng);
发送服务器(latlng);
}
});
//开始位置检索任务
新建RetrieveTask().execute();
}
//在谷歌地图上添加标记
专用空隙添加标记器(LatLng LatLng){
MarkerOptions MarkerOptions=新MarkerOptions();
标记选项位置(板条);
标记选项。标题(纬度+“,”+纬度经度);
mGoogleMap.addMarker(markerOptions);
}
//调用后台线程在Remove MySQL服务器中存储被触摸的位置
专用void发送服务器(LatLng LatLng){
新建SaveTask().execute(latlng);
}
//在remove MySQL server中保存位置的后台线程
私有类SaveTask扩展了异步任务{
@凌驾
受保护的空位背景(LatLng…参数){
字符串lat=Double.toString(参数[0]。纬度);
字符串lng=Double.toString(参数[0]。经度);
字符串strUrl=”http://192.168.0.106/pontos/save.php";                 
URL=null;
试一试{
url=新url(strUrl);
HttpURLConnection连接=(HttpURLConnection)url
.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
OutputStreamWriter OutputStreamWriter=新的OutputStreamWriter(
connection.getOutputStream());
outputStreamWriter.write(“lat=“+lat+”&lng=“+lng”);
outputStreamWriter.flush();
outputStreamWriter.close();
InputStream iStream=connection.getInputStream();
BufferedReader读取器=新的BufferedReader(新的
InputStreamReader(iStream));
StringBuffer sb=新的StringBuffer();
字符串行=”;
而((line=reader.readLine())!=null){
某人附加(行);
}
reader.close();
iStream.close();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}
//从远程mysql服务器检索位置的后台任务
私有类RetrieveTask扩展了异步任务{
@凌驾
受保护字符串doInBackground(无效…参数){
字符串strUrl=”http://192.168.0.106/pontos/retrieve.php";             
URL=null;
StringBuffer sb=新的StringBuffer();
试一试{
url=新url(strUrl);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream iStream=connection.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(iStream));
字符串行=”;
而((line=reader.readLine())!=null){
某人附加(行);
}
reader.close();
iStream.close();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}       
使某人返回字符串();
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
新建ParserTask()。执行(结果);
}
}
//后台线程解析从MySQL服务器检索到的JSON数据
私有类ParserTask扩展了AsyncTask{
@凌驾
受保护列表doInBackground(字符串…参数){
MarkerJSONParser markerParser=新的MarkerJSONParser();
JSONObject json=null;
试一试{
json=新的JSONObject(参数[0]);
}捕获(JSONException e){
e、 printStackTrace();
}
List-markersList=markerParser.parse(json);
返回标记列表;
}
@凌驾
受保护的void onPostExecute(列表结果){

对于(int i=0;iFor
从我的mySQL数据库在Google Maps v2上创建标记,你可以参考。可以更好地解释php的部分吗?我尝试做的唯一一件事是使用title作为标记,HashMap只接受纬度和经度的两种类型,什么
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;
    }
}