谷歌地图折线不工作在Android 5.0版(棒棒糖) [英] google map polyline is not working on android version 5.0(lollipop)

查看:204
本文介绍了谷歌地图折线不工作在Android 5.0版(棒棒糖)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图为googlemap绘制多段线,它工作正常,但是它不适用于android 5.0(棒棒糖)。还有什么做棒棒糖的工作。你能帮我锄头解决这个问题,这是我的谷歌地图代码

  public class MapLocation extends FragmentActivity implements OnMarkerClickListener {

GoogleMap地图;
ArrayList< LatLng> markerPoints;

LatLng来源,dest1,dest2,dest3;
标记marker1,marker2,marker3;

PolylineOptions lineOptions = new PolylineOptions();

折线;
int pos;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.gmap_direction);

markerPoints = new ArrayList< LatLng>();

//获取对Activity_main的SupportMapFragment的引用
SupportMapFragment fm =(SupportMapFragment)getSupportFragmentManager()。findFragmentById(R.id.map);

//获取SupportMapFragment的映射
map = fm.getMap();
$ b $ if(map!= null){

//在地图
中启用MyLocation按钮map.setMyLocationEnabled(true);

//从系统服务LOCATION_SERVICE获取LocationManager对象
LocationManager locationManager =(LocationManager)getSystemService(LOCATION_SERVICE);

//创建一个标准对象来检索提供者
Criteria criteria = new Criteria();

//获取最佳提供者的名称
字符串提供者= locationManager.getBestProvider(criteria,true);

//获取当前位置
位置位置= locationManager.getLastKnownLocation(provider);
pos = getIntent()。getIntExtra(pos,0);
try {
switch(pos){

case 1:

dest2 = new LatLng(18.545981,73.902132);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(PUNE,KALYANINAGAR)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))) ;
休息;
案例2:

dest2 =新LatLng(17.429122,78.412745);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(Jubilee Hills)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
休息;
案例3:

dest2 =新LatLng(19.115177,72.909486);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(MUMBAI,POWAI)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))) ;
休息;
案例4:

dest2 =新LatLng(18.545981,73.902132);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(PUNE,MAGARPATTA)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))) ;
休息;
情况5:

dest2 =新LatLng(12.924438,77.631537);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(Koramangala)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
休息;
案例6:

dest2 =新LatLng(12.9044019,77.6690773);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(Sarjapur)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
休息;
案例7:

dest2 =新LatLng(12.972442,77.639195);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(Indiranagar)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
休息;
案例8:

dest2 =新LatLng(12.968719,77.747883);
marker2 = map.addMarker(new MarkerOptions()。position(dest2).title(Vivero International Preschool)。snippet(Whitefield)。icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
休息;
// dest1 = new LatLng(19.115177,72.909486);
}

//在Google Map中显示当前位置
map.moveCamera(CameraUpdateFactory.newLatLng(dest2));

//放大Google Map
map.animateCamera(CameraUpdateFactory.zoomTo(15));

marker2.showInfoWindow();


if(location!= null){
onLocationChanged(location);

String url = getDirectionsUrl(origin,dest2);

DownloadTask downloadTask = new DownloadTask();

//开始从Google Directions API下载json数据
downloadTask.execute(url);
}
}
catch(Exception e){

}
}
}
/ **要分析的类JSON格式的Google Places * /
private class ParserTask extends AsyncTask< String,Integer,List< List< HashMap< String,String>>> > {

//解析非ui线程中的数据
@Override
protected List< List< HashMap< String,String>>>> doInBackground(String ... jsonData){

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

尝试{
jObject = new JSONObject(jsonData [0]);
DirectionsJSONParser解析器= new DirectionsJSONParser();

//开始解析数据
routes = parser.parse(jObject);
} catch(Exception e){
e.printStackTrace();
}
返回路线;
}

//在解析过程之后在UI线程中执行
@Override
protected void onPostExecute(List< List< HashMap< String,String>> >结果){
ArrayList< LatLng> points = null;
// PolylineOptions lineOptions = null;

MarkerOptions markerOptions = new MarkerOptions();
$ b $ //遍历所有路由
for(int i = 0; i< result.size(); i ++){
points = new ArrayList< LatLng>() ;
// lineOptions = new PolylineOptions();

//获取第i条路线
List< HashMap< String,String>> path = result.get(i);

//获取第i条路径中的所有点
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);
}

//将路线中的所有点添加到LineOptions
lineOptions.addAll(points);
lineOptions.width(4);
lineOptions.color(Color.BLUE);



//在Google Map中为第i条路线绘制多段线
//map.addPolyline(lineOptions);
line = map.addPolyline(lineOptions);




解决方案

尝试为 onPostExecute 修改的代码:

  @覆盖
protected void onPostExecute(List< List< HashMap< String,String>>> result){
ArrayList< LatLng> points = null;
// PolylineOptions lineOptions = null;

// MarkerOptions markerOptions = new MarkerOptions();

points = new ArrayList< LatLng>();

//遍历所有路由
for(int i = 0; i< result.size(); i ++){
// points = new ArrayList< LatLng> ();
// lineOptions = new PolylineOptions();

//获取第i条路线
List< HashMap< String,String>> path = result.get(i);

//获取第i条路径中的所有点
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);
}

//将路线中的所有点添加到LineOptions
//lineOptions.addAll(points);
//lineOptions.width(4);
//lineOptions.color(Color.BLUE);



//在Google Map中为第i条路线绘制多段线
//map.addPolyline(lineOptions);

lineOptions.addAll(points);
lineOptions.width(4);
lineOptions.color(Color.BLUE);
line = map.addPolyline(lineOptions);
}

我将您的清单 for 循环之前的实例,还有 lineOptions 之后 for 循环。



希望得到这个帮助。

i am trying to draw polyline for googlemap, it is working fine upto android version 4.4(kitkat) but it is not working in android 5.0(lollipop). what to do for working in lollipop also. could you please help me hoe to resolve this issues this is my google map code

public class MapLocation extends FragmentActivity implements OnMarkerClickListener {

    GoogleMap map;
    ArrayList<LatLng> markerPoints;

    LatLng origin,dest1,dest2,dest3;    
    Marker marker1,marker2,marker3;

    PolylineOptions lineOptions = new PolylineOptions();

    Polyline line ;
    int pos;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.gmap_direction);

        markerPoints = new ArrayList<LatLng>();

        // Getting reference to SupportMapFragment of the activity_main
        SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

        // Getting Map for the SupportMapFragment
        map = fm.getMap();      

        if(map!=null){

            // Enable MyLocation Button in the Map
            map.setMyLocationEnabled(true);     

            // Getting LocationManager object from System Service LOCATION_SERVICE
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location
            Location location = locationManager.getLastKnownLocation(provider);
            pos = getIntent().getIntExtra("pos",0); 
            try{
            switch (pos) {

               case 1:

                   dest2 = new LatLng(18.545981, 73.902132);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,KALYANINAGAR").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 2:

                   dest2 = new LatLng(17.429122, 78.412745);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Jubilee Hills").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 3:

                   dest2 =  new LatLng(19.115177, 72.909486);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("MUMBAI, POWAI").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 4:

                   dest2 = new LatLng(18.545981, 73.902132);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("PUNE,MAGARPATTA").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 5:

                   dest2 = new LatLng(12.924438, 77.631537);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Koramangala").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 6:

                   dest2 =  new LatLng(12.9044019,77.6690773);
                   marker2 = map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Sarjapur").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 7:

                   dest2 = new LatLng(12.972442, 77.639195);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Indiranagar").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
               case 8:

                   dest2 = new LatLng(12.968719, 77.747883);
                   marker2 =  map.addMarker(new MarkerOptions().position(dest2).title("Vivero International Preschool").snippet("Whitefield").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
                   break;
                   //  dest1 = new LatLng(19.115177, 72.909486);
            }

            // Showing the current location in Google Map
            map.moveCamera(CameraUpdateFactory.newLatLng(dest2));

            // Zoom in the Google Map
            map.animateCamera(CameraUpdateFactory.zoomTo(15));     

            marker2.showInfoWindow();   


            if(location!=null){
                onLocationChanged(location);

            String url = getDirectionsUrl(origin, dest2);               

            DownloadTask downloadTask = new DownloadTask();

            // Start downloading json data from Google Directions API
            downloadTask.execute(url);
            }
            }
            catch(Exception e){

            }
        }       
    }
    /** A class to parse the Google Places 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;

            MarkerOptions markerOptions = new MarkerOptions();

            // 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(4);
                lineOptions.color(Color.BLUE);

            }

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

解决方案

Try the modified codes for your onPostExecute:

@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
        ArrayList<LatLng> points = null;
        //PolylineOptions lineOptions = null;

        //MarkerOptions markerOptions = new MarkerOptions();

        points = new ArrayList<LatLng>();

        // 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(4);
            //lineOptions.color(Color.BLUE);

        }

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

        lineOptions.addAll(points);
        lineOptions.width(4);
        lineOptions.color(Color.BLUE); 
        line = map.addPolyline(lineOptions);
    }           

I moved your list points instance before for loop, and also lineOptions after for loop.

Hope this help.

这篇关于谷歌地图折线不工作在Android 5.0版(棒棒糖)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆