通过套接字发送Google Map路线指示

时间:2014-02-18 11:55:57

标签: android

我正在开发一个使用Google Maps v2 API的Android应用程序,并且正在查找我的位置和其他位置之间的路线。此应用程序充当另一个Android设备上的另一个应用程序的客户端。第二个设备没有GPS连接。当我通过套接字连接两个设备时,服务器(在第二个设备上运行)应该从客户端和路由接收位置。

现在,我的问题在于路线。我在第一个应用程序上下载了路由,然后在那里使用这个AsyncTask在地图上制作叠加层:

 /** A class to parse the Google Directions in JSON format */
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

    // Parsing the data in non-ui thread
    @Override
    protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

        JSONObject jObject;
        List<List<HashMap<String, String>>> routes = null;

        try{
            jObject = new JSONObject(jsonData[0]);
            DirectionsJSONParser parser = new DirectionsJSONParser();

            // Starts parsing data
            routes = parser.parse(jObject);
        }catch(Exception e){
            e.printStackTrace();
        }
        return routes;
    }

    // Executes in UI thread, after the parsing process
    @Override
    protected void onPostExecute(List<List<HashMap<String, String>>> result) {
        ArrayList<LatLng> points = null;
        PolylineOptions lineOptions = null;

        // Traversing through all the routes
        for(int i=0;i<result.size();i++){
            points = new ArrayList<LatLng>();
            lineOptions = new PolylineOptions();

            // Fetching i-th route
            List<HashMap<String, String>> path = result.get(i);

            // Fetching all the points in i-th route
            for(int j=0;j<path.size();j++){
                HashMap<String,String> point = path.get(j);

                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));
                LatLng position = new LatLng(lat, lng);

                points.add(position);
            }

            // Adding all the points in the route to LineOptions
            lineOptions.addAll(points);
            lineOptions.width(6);
            lineOptions.color(Color.MAGENTA);
        }

        // Drawing polyline in the Google Map for the i-th route
        mGoogleMap.addPolyline(lineOptions);
    }
}

它在第一个应用程序上工作正常。然后我连接到另一个应用程序并发送我为路由下载的相同字符串。我已经实现了相同的AsyncTask来解析String但应用程序崩溃了。

Here's what I get in the LogCat:

1 个答案:

答案 0 :(得分:1)

请注意,如果发生异常而导致结果为null,则routes变量可以为null。

此致 Prateek