2014-01-28 2 views
2

Итак, у меня есть мои карты Google, и то, что я делаю, это получить широту и долготу с моего сервера в виде строки, а затем конвертировать их в место LatLng. Проблема, с которой я столкнулась, заключается в том, что если телефон не забирает местоположение gps, он хранит пустую строку в моей базе данных, а затем, когда карты Google попытаются ее отобразить, она отключает мое приложение для всех пользователей, пытающихся получить доступ к карте. Который я собираю из пустой строки, потому что, если я удалю ее из своей базы данных, все снова отлично работает. То, что мне нужно знать, это лучший способ проверить пустую строку или null LatLng и пропустить ее, чтобы она не разбилась.Google Map crash null LatLng

EDIT CODE ОБНОВЛЕНО

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) 
+1

Пожалуйста, ваши ошибки LogCat. Вы получаете 'String lat' и' String lng 'null? – GrIsHu

+0

Если вы пытаетесь проверить, что строка имеет значение «null», используйте if («null» .equals (lat) && «null» .equals (lng)) вместо –

+0

По-прежнему такая же ошибка, используя if ("null" .equals (lat) && "null" .equals (lng)) – Jayce

ответ

1

Попробуйте, как показано ниже:

 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){} 
     } 
+0

Это не спасет. Говорит, что lat_, lng_ не может быть разрешено переменной в этой строке. LatLng location = новый LatLng (lat_, lng_); – Jayce

+0

Здесь нет смысла пытаться поймать здесь. Даже если исключение поймано, значения все еще ошибочны. – Ogen

+0

Проверьте нулевые значения строки. Проверьте мой обновленный ответ. Вы получаете значения «lat lng»? – GrIsHu

0

Добавьте эту строку после того, как вы заявляете свои строки.

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

Это будет пропускать итерации, где у вас есть пустые строки, которые дают вам пустые места

+0

lat == "" || lng == "" и lat.equals ("") || lng.equals ("") - ни одна из этих работ и все еще не работает. – Jayce

+0

Что скажет сообщение об ошибке при сбое – Ogen

+0

@ user3186578 Без сообщения об ошибке вы не получите правильное решение, поэтому, пожалуйста, разместите ошибку, которую вы получаете. – GrIsHu

0

То, что происходит в том, что информация, которую вы тянете из базы данных не может быть отформатирована как число. Вы можете заставить это работать, но мне кажется, что лучшим решением было бы не хранить поврежденные или недопустимые значения в вашей базе данных. Поэтому просто подождите, пока устройство не получит обновление позиции, прежде чем что-то нажать на базу данных или вообще ничего не поместить. Кроме того, почему вы сохраняете местоположение в виде строки? Вы можете ввести его в виде числа, поэтому вам не нужно сериализовать и десериализовать его каждый раз.

+0

Это мое первое приложение для Android, я обычно делаю php/mysql, поэтому я заставляю его работать так, как мне нужно.И я не хранил места, я позволяю пользователям хранить местоположения, и если они нажимают кнопку добавления местоположения до полного блокирования gps, он вставляет пустые значения. – Jayce

Смежные вопросы