Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Android 谷歌地图崩溃_Android_Google Maps - Fatal编程技术网

Android 谷歌地图崩溃

Android 谷歌地图崩溃,android,google-maps,Android,Google Maps,所以我有我的谷歌地图,我所做的是从我的服务器获取纬度和经度作为一个字符串,然后我将它们转换成一个LatLng位置。我遇到的问题是,如果手机没有接收到gps位置,它会在我的数据库中存储一个空字符串,然后当谷歌地图试图显示它时,它会使所有试图访问地图的用户的应用程序崩溃。我收集的是空字符串,因为如果我从数据库中删除该字符串,一切都会恢复正常。我需要知道的是检查空字符串或空LatLng并跳过它的最好方法,这样它就不会崩溃 编辑代码已更新 for (int i = 0; i < marker_li

所以我有我的谷歌地图,我所做的是从我的服务器获取纬度和经度作为一个字符串,然后我将它们转换成一个LatLng位置。我遇到的问题是,如果手机没有接收到gps位置,它会在我的数据库中存储一个空字符串,然后当谷歌地图试图显示它时,它会使所有试图访问地图的用户的应用程序崩溃。我收集的是空字符串,因为如果我从数据库中删除该字符串,一切都会恢复正常。我需要知道的是检查空字符串或空LatLng并跳过它的最好方法,这样它就不会崩溃

编辑代码已更新

for (int i = 0; i < marker_list.size(); i+=2)
{
              String lat = marker_list.get(i);
              String lng = marker_list.get(i+1);

              // NEED TO MAKE SURE CHECK BEFORE HERE AND IF LOCATION DOESN'T EXIST SKIP TO NEXT.
              if (lat == "" || lng == "")
              {
                  continue;
              }
              else
{
              double lat_ = Double.valueOf(lat);
          double lng_ = Double.valueOf(lng);

              LatLng location = new LatLng(lat_, lng_);

              map.addMarker(new MarkerOptions()
                    .position(location)
                    .title(title)
                    .snippet(index)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.event)));
 }

}


01-28 00:33:58.060: E/AndroidRuntime(919): FATAL EXCEPTION: main
01-28 00:33:58.060: E/AndroidRuntime(919): Process: com.databasedemo, PID: 919
01-28 00:33:58.060: E/AndroidRuntime(919): java.lang.NumberFormatException: Invalid double: ""
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.StringToReal.parseDouble(StringToReal.java:248)
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.Double.parseDouble(Double.java:295)
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.Double.valueOf(Double.java:332)
01-28 00:33:58.060: E/AndroidRuntime(919):  at com.databasedemo.Map$PrefetchData.onPostExecute(Map.java:257)
01-28 00:33:58.060: E/AndroidRuntime(919):  at com.databasedemo.Map$PrefetchData.onPostExecute(Map.java:1)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.os.AsyncTask.finish(AsyncTask.java:632)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.os.Handler.dispatchMessage(Handler.java:102)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.os.Looper.loop(Looper.java:136)
01-28 00:33:58.060: E/AndroidRuntime(919):  at android.app.ActivityThread.main(ActivityThread.java:5017)
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.reflect.Method.invokeNative(Native Method)
01-28 00:33:58.060: E/AndroidRuntime(919):  at java.lang.reflect.Method.invoke(Method.java:515)
01-28 00:33:58.060: E/AndroidRuntime(919):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-28 00:33:58.060: E/AndroidRuntime(919):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-28 00:33:58.060: E/AndroidRuntime(919):  at dalvik.system.NativeStart.main(Native Method)
for(int i=0;i
在声明字符串后添加此行

if (lat == "" || lng == "") {
   continue;
}

这将跳过一次迭代,在该迭代中,空字符串将为您提供空位置

发生的情况是,您从数据库中提取的信息无法格式化为数字。您可以让它工作,但在我看来,最好的解决方案是不要在数据库中存储损坏或无效的值。因此,只需等待设备获得位置更新,然后再将某些内容推送到数据库,或者根本不放置任何内容。另外,为什么要将位置存储为字符串?您可以将它作为一个数字推入,这样就不需要每次都对其进行序列化和反序列化

按如下方式进行尝试:

     String lat = marker_list.get(i);
     String lng = marker_list.get(i+1);
     if(!lat.isEmpty() && !lng.isEmpty())
     {
        try{
         double lat_ = Double.parseDouble(lat);
         double lng_ = Double.parseDouble(lng);
    }catch(NumberFormatException e){}
       }

请发布您的logcat错误。您是否得到
字符串lat
字符串lng
null?如果您试图检查字符串的值是否为“null”,请使用If(“null”.equals(lat)和&“null”.equals(lng)),而不是使用If(“null”.equals(lat)和&“null”.equals(lng))lat==“||lng==”和lat.equals(“)--这两项都不能工作,但仍会使应用程序崩溃。@user3186578如果没有错误消息,您将无法获得正确的解决方案,因此请发布您得到的错误。请尝试将“”更改为null。我认为字符串是空的,不是空的。所以说如果(lat==null | | lng==null)添加了logcat。我知道是双倍的,只是不知道如何检查。。还尝试了lat lng==null,但仍然相同。我需要检查double而不是null吗?@user3186578发生的是,您的字符串是空的。因此,当您从字符串创建double时,它会给您一个错误,因为该字符串不包含数字。我不明白你为什么在遵循我的答案时仍然会犯这个错误。你确定你在我的答案中把if语句放在double声明之前了吗?这是我的第一个android应用程序,我通常使用php/mysql,所以我可以根据需要使用它。不是我存储位置,我让用户存储位置,如果他们在gps拥有total lock之前单击add location(添加位置)按钮,它会插入空白值。它不会保存。表示lat_u1;,lng_1;不能解析为此行的变量。LatLng位置=新LatLng(lat,lng);这里没有试抓的必要。即使捕获到异常,值仍然错误。请检查字符串的空值。检查我的最新答案。你得到的
lat lng
值是偶数吗?我使用了if(lat.isEmpty()&&lng.isEmpty()){continue;},它可以工作。谢谢。