Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法绘制Android Google Map V3多段线_Java_Android_Google Maps_Parsing_Google Maps Api 3 - Fatal编程技术网

Java 无法绘制Android Google Map V3多段线

Java 无法绘制Android Google Map V3多段线,java,android,google-maps,parsing,google-maps-api-3,Java,Android,Google Maps,Parsing,Google Maps Api 3,尝试在Google地图上匹配多段线时出现此错误 java.lang.NullPointerException:尝试读取字段“float” 空对象上的com.google.android.gms.maps.model.PolylineOptions.c 参考文献 这是Logcat中提到的行 在 testappmapv2.PathGoogleMapActivity$ParserTask.onPostExecute(PathGoogleMapActivity.java:208) 添加多段线(多段线选项

尝试在Google地图上匹配多段线时出现此错误

java.lang.NullPointerException:尝试读取字段“float” 空对象上的com.google.android.gms.maps.model.PolylineOptions.c 参考文献

这是Logcat中提到的行

在 testappmapv2.PathGoogleMapActivity$ParserTask.onPostExecute(PathGoogleMapActivity.java:208)

添加多段线(多段线选项)

这是我的活动代码:

import android.app.AlarmManager; import android.app.PendingIntent;
import android.content.Context; import android.content.Intent;
import android.graphics.Color; import android.location.Location;               

import android.os.AsyncTask; import android.os.Bundle;  
import android.support.v4.app.FragmentActivity;  
import android.util.Log;
import com.google.android.gms.maps.CameraUpdateFactory;  
import com.google.android.gms.maps.GoogleMap;  
import com.google.android.gms.maps.SupportMapFragment;  
import com.google.android.gms.maps.model.LatLng;  
import com.google.android.gms.maps.model.Marker;  
import com.google.android.gms.maps.model.MarkerOptions;  
import com.google.android.gms.maps.model.PolylineOptions;  
import com.parse.ParseException; 
import com.parse.ParseGeoPoint;  
import com.parse.ParseObject; 
import com.parse.ParseQuery;

import org.json.JSONObject;
import java.util.ArrayList; import java.util.HashMap; 
import java.util.List;

 public class PathGoogleMapActivity extends FragmentActivity {

         Location mCurrentLocation;
         String mLastUpdateTime;
         GoogleMap googleMap;
         LatLng visitedPoints, currentPoints;
         final String TAG = "PathGoogleMapActivity";
         MarkerOptions options;
         Marker marker;
         private final String DIRECTIONS_API_KEY = "*****************";
         private String parseClass = "LocationManager";
         private String User_id = "12345";
         private List<ParseObject> list;
         private List<LatLng> latLngList=new ArrayList<LatLng>();

         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_path_google_map);
             SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
                     .findFragmentById(R.id.map);
             googleMap = fm.getMap();
             googleMap.getUiSettings().setZoomControlsEnabled(true);        

         }



         @Override
         protected void onResume() {
             super.onResume();

             try {
                 ParseQuery<ParseObject> parseQuery = ParseQuery.getQuery(parseClass);
                 parseQuery.whereEqualTo("User_Id", User_id);

                 list = parseQuery.find();

                 final ArrayList visitedPoint = (ArrayList) list.get(0).get("VisitedPoint");

                 for (Object parseGeoPoint : visitedPoint) {

                     ParseGeoPoint geoPoint = (ParseGeoPoint) parseGeoPoint;
                     LatLng latLng = new LatLng(geoPoint.getLatitude(), geoPoint.getLongitude());
                     latLngList.add(latLng);
                     Log.i(TAG, "parseGeoPoint" + latLng.toString());
                 }

                 googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLngList.get(latLngList.size()-1),
    15.0f));

                 Log.i(TAG, "Size of List: " + list.size());
                 Log.i(TAG, "ArrayList: " + visitedPoint.size());
                 Log.i(TAG, "ArrayList: " + visitedPoint.toString());


             } catch (ParseException e) {
                 e.printStackTrace();
             }

             for(int i=0;i<latLngList.size()-1;i++)
             {
                 String url = getMapsApiDirectionsUrl(latLngList.get(i), latLngList.get(i+1));
                 ReadTask downloadTask = new ReadTask();
                 downloadTask.execute(url);
                 addMarkers(latLngList.get(i+1));
             }    }



         private String getMapsApiDirectionsUrl(LatLng start, LatLng end) {

             String output = "json";
             String url = "https://maps.googleapis.com/maps/api/directions/json?"
                     + "origin=" + start.latitude + "," + start.longitude
                     + "&destination=" + end.latitude + "," + end.longitude
                     + "&sensor=false&units=metric&mode=walking&key=" + DIRECTIONS_API_KEY;
             return url;
         }

         private void addMarkers(LatLng latLng) {      

             marker = googleMap.addMarker(new MarkerOptions().position(latLng).title("You are here"));
         }

         private class ReadTask extends AsyncTask<String, Void, String> {
             @Override
             protected String doInBackground(String... url) {
                 String data = "";
                try {
                     HttpConnection http = new HttpConnection();
                     data = http.readUrl(url[0]);
                 } catch (Exception e) {
                     Log.d("Background Task", e.toString());
                 }
                 return data;
             }

             @Override
             protected void onPostExecute(String result) {
                 super.onPostExecute(result);
                 new ParserTask().execute(result);
             }
         }

         private class ParserTask extends
                 AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {
             @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]);
                     PathJSONParser parser = new PathJSONParser();
                     routes = parser.parse(jObject);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
                 return routes;
             }

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

                 // traversing through routes
                 for (int i = 0; i < routes.size(); i++) {
                     points = new ArrayList<LatLng>();
                     polyLineOptions = new PolylineOptions();
                     List<HashMap<String, String>> path = routes.get(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);
                     }

                     polyLineOptions.addAll(points);
                    polyLineOptions.width(2);
                    polyLineOptions.color(Color.BLUE);
                 }

                 googleMap.addPolyline(polyLineOptions);
             }}}
导入android.app.AlarmManager;导入android.app.pendingent;
导入android.content.Context;导入android.content.Intent;
导入android.graphics.Color;导入android.location.location;
导入android.os.AsyncTask;导入android.os.Bundle;
导入android.support.v4.app.FragmentActivity;
导入android.util.Log;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.Marker;
导入com.google.android.gms.maps.model.MarkerOptions;
导入com.google.android.gms.maps.model.PolylineOptions;
导入com.parse.ParseException;
导入com.parse.ParseGeoPoint;
导入com.parse.ParseObject;
导入com.parse.ParseQuery;
导入org.json.JSONObject;
导入java.util.ArrayList;导入java.util.HashMap;
导入java.util.List;
公共类PathGoogleMapActivity扩展了FragmentActivity{
位置mCurrentLocation;
字符串mLastUpdateTime;
谷歌地图谷歌地图;
LatLng访问点、当前点;
最后一个字符串TAG=“PathGoogleMapActivity”;
标记选项选项;
标记;
私有最终字符串方向_API_KEY=“*******************”;
私有字符串parseClass=“LocationManager”;
私有字符串用户\u id=“12345”;
私人名单;
private List latLngList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u path\u google\u map);
SupportMapFragment fm=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
googleMap=fm.getMap();
googleMap.getUiSettings().setZoomControlsEnabled(true);
}
@凌驾
受保护的void onResume(){
super.onResume();
试一试{
ParseQuery ParseQuery=ParseQuery.getQuery(parseClass);
parseQuery.whereEqualTo(“用户Id”,用户Id);
list=parseQuery.find();
最终ArrayList visitedPoint=(ArrayList)list.get(0.get(“visitedPoint”);
用于(对象解析地理点:visitedPoint){
ParseGeoPoint地质点=(ParseGeoPoint)ParseGeoPoint;
LatLng LatLng=新LatLng(geoPoint.getLatitude(),geoPoint.getLongitude());
latLngList.add(latLng);
Log.i(标记“parseGeoPoint”+latLng.toString());
}
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLngList.get(latLngList.size()-1)),
15.0f),;
Log.i(标记,“列表大小:+List.Size());
Log.i(标记“ArrayList:+visitedPoint.size());
i(标记“ArrayList:+visitedPoint.toString());
}捕获(解析异常){
e、 printStackTrace();
}

对于(int i=0;i它看起来像是
polyLineOptions
从未被实例化

如果
routes.size()
为0,则可能发生这种情况

您的问题似乎与传递给
onPostExecute
方法的数据有关,因此请检查它是否有效以及是否正确解析

在任何情况下,您都应该在使用前添加一个检查,查看
polyLineOptions
是否为null,例如

if (polyLineOptions != null)
{
     googleMap.addPolyline(polyLineOptions);
}

这将确保您的应用程序在接收或解析数据时出错时不会崩溃。

if(googleMap==null){don't use}。这帮助我避免了崩溃。问题是我的directions API使用配额已用完。谢谢!非常感谢,让我避免了大量时间浪费。