2015-09-12 51 views
0

当我点击我的操作按钮时出现错误。我从一个名为“GPSTracker”的类中获取两个坐标,然后使用方法“getLatitude”和“getLongitude”返回到我的类。如果我点击我的行动按钮,我得到这个错误:错误NumberFormatException Android

09-12 17:07:46.898 24575-24575/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.application.marcoopsone.centrocommercialecampania, PID: 24575 
java.lang.NumberFormatException: Invalid double: "4782877,28" 
     at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
     at java.lang.StringToReal.initialParse(StringToReal.java:164) 
     at java.lang.StringToReal.parseDouble(StringToReal.java:282) 
     at java.lang.Double.parseDouble(Double.java:301) 
     at com.application.marcoopsone.centrocommercialecampania.FragmentCar.getFila(FragmentCar.java:177) 
     at com.application.marcoopsone.centrocommercialecampania.FragmentCar$1.onClick(FragmentCar.java:95) 
     at android.view.View.performClick(View.java:5254) 
     at android.view.View$PerformClick.run(View.java:21174) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:6862) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

,如果我做的运行在模拟器上genymotion应用,没事!如果我使用我的三星平板电脑,我会收到错误消息。我该如何解决?

+0

为什么有逗号的双重之间:4782877,28 ---看日志正常。 – Tauqir

+0

把代码放在这里......你没有使用正确的值来解析 –

+0

是我的位置的坐标。例如41.001254和14.003235。 – Marco

回答

0

GPSTracker

进口...

公共类GPSTracker扩展服务实现LocationListener的{

private final Context context; 

boolean isGPSEnabled = false; 
boolean isNetworkEnabled = false; 
boolean canGetLocation = false; 

Location location; 

double latitude; 
double longitude; 

private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; 

protected LocationManager locationManager; 

public GPSTracker(Context context) { 
    this.context = context; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 

     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 

     } else { 
      this.canGetLocation = true; 

      if (isNetworkEnabled) { 

       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

        if (location != null) { 

         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 

      } 

      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

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

    return location; 
} 


public void stopUsingGPS() { 
    if (locationManager != null) { 
     locationManager.removeUpdates(GPSTracker.this); 
    } 
} 

public double getLatitude() { 
    if(location != null) { 
     latitude = location.getLatitude(); 
    } 
    return latitude; 
} 

public double getLongitude() { 
    if(location != null) { 
     longitude = location.getLongitude(); 
    } 

    return longitude; 
} 

public boolean canGetLocation() { 
    return this.canGetLocation; 
} 

public void showSettingsAlert() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 

    alertDialog.setTitle("GPS is settings"); 

    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      context.startActivity(intent); 
     } 
    }); 

    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 

    alertDialog.show(); 
} 

@Override 
public void onLocationChanged(Location arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderDisabled(String arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

片段汽车

公共类FragmentCar扩展android.support.v4.app.Fragment {

private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private TextView textFila; 
private Button btn; 

//VARIABILI GPS 

GPSTracker gps; 

static final int RAGGIO = 6371; 
static final double PIGRECO = Math.PI; 


double f1_latitudine = 41.00413; 
double f1_longitudine = 14.32642; 

double f2_latitudine = 41.00399; 
double f2_longitudine = 14.32643; 

double f3_latitudine = 41.00385; 
double f3_longitudine = 14.32645; 

double f4_latitudine = 41.0037; 
double f4_longitudine = 14.32647; 

double f5_latitudine = 41.00359; 
double f5_longitudine = 14.32648; 

double p_latitudine = 41.00388; 
double p_longitudine = 14.32584; 

double ps_latitudine = 41.00402; 
double ps_longitudine = 14.3248; 

private FloatingActionButton mFAB; 


public FragmentCar() { 
    // Required empty public constructor 
} 

public static android.support.v4.app.Fragment newInstance(String param1, String param2) { 
    FragmentCar fragment = new FragmentCar(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View layout = inflater.inflate(R.layout.fragment_car, container, false); 

    //setupFAB(); 

    textFila = (TextView) layout.findViewById(R.id.textFila); 

    btn = (Button) layout.findViewById(R.id.buttonSavePosition); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getFila(); 
     } 
    }); 

    return layout; 
} 

private void setupFAB() { 
    //define the icon for the main floating action button 
    ImageView iconFAB = new ImageView(getActivity()); 
    iconFAB.setImageResource(R.drawable.ic_action_new); 

    //set the appropriate background for the main floating action button along with its icon 
    mFAB = new FloatingActionButton.Builder(getActivity()) 
      .setContentView(iconFAB) 
      .setBackgroundDrawable(R.drawable.selector_button_red) 
      .build(); 

    mFAB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getFila(); 
     } 
    }); 

} 

public void getFila(){ 

    gps = new GPSTracker(getActivity()); 

    if(gps.canGetLocation()) { 

     double latitude = 0; 
     double longitude = 0; 

     latitude = new Double(gps.getLatitude()); 
     longitude = new Double(gps.getLongitude()); 

     DecimalFormat df = new DecimalFormat("0.000000"); 
     double lat = Double.parseDouble(df.format(latitude)); 
     double lon = Double.parseDouble(df.format(longitude)); 


     double laRadianti = (lat * PIGRECO)/180; 
     double loRadianti = (lon * PIGRECO)/180; 

     double f1_latitudineRadianti = (f1_latitudine * PIGRECO)/180; 
     double f1_longitudineRadianti = (f1_longitudine * PIGRECO)/180; 
     double f2_latitudineRadianti = (f2_latitudine * PIGRECO)/180; 
     double f2_longitudineRadianti = (f2_longitudine * PIGRECO)/180; 
     double f3_latitudineRadianti = (f3_latitudine * PIGRECO)/180; 
     double f3_longitudineRadianti = (f3_longitudine * PIGRECO)/180; 
     double f4_latitudineRadianti = (f4_latitudine * PIGRECO)/180; 
     double f4_longitudineRadianti = (f4_longitudine * PIGRECO)/180; 
     double f5_latitudineRadianti = (f5_latitudine * PIGRECO)/180; 
     double f5_longitudineRadianti = (f5_longitudine * PIGRECO)/180; 
     double p_latitudineRadianti = (p_latitudine * PIGRECO)/180; 
     double p_longitudineRadianti = (p_longitudine * PIGRECO)/180; 

     double distanzaUno = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(f1_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(f1_latitudineRadianti) * Math.cos((loRadianti - f1_longitudineRadianti))))) * 1000; 

     double distanzaDue = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(f2_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(f2_latitudineRadianti) * Math.cos((loRadianti - f2_longitudineRadianti))))) * 1000; 

     double distanzaTre = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(f3_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(f3_latitudineRadianti) * Math.cos((loRadianti - f3_longitudineRadianti))))) * 1000; 

     double distanzaQuattro = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(f4_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(f4_latitudineRadianti) * Math.cos((loRadianti - f4_longitudineRadianti))))) * 1000; 

     double distanzaCinque = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(f5_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(f5_latitudineRadianti) * Math.cos((loRadianti - f5_longitudineRadianti))))) * 1000; 

     double distanzaPunto = ((RAGGIO * Math.acos(Math.sin(laRadianti) * Math.sin(p_latitudineRadianti) + 
       Math.cos(laRadianti) * Math.cos(p_latitudineRadianti) * Math.cos((loRadianti - p_longitudineRadianti))))) * 1000; 

     DecimalFormat df1 = new DecimalFormat("0.00"); 
     double distanzaFilaUno = Double.parseDouble(df1.format(distanzaUno)); 
     double distanzaFilaDue = Double.parseDouble(df1.format(distanzaDue)); 
     double distanzaFilaTre = Double.parseDouble(df1.format(distanzaTre)); 
     double distanzaFilaQuattro = Double.parseDouble(df1.format(distanzaQuattro)); 
     double distanzaFilaCinque = Double.parseDouble(df1.format(distanzaCinque)); 
     double distanzaFilaPunto = Double.parseDouble(df1.format(distanzaPunto)); 

     if(distanzaFilaUno < distanzaFilaDue && distanzaFilaUno < distanzaFilaTre && distanzaFilaUno < distanzaFilaQuattro && distanzaFilaUno < distanzaFilaCinque){ 
      if(distanzaFilaUno > 110 && distanzaFilaUno < 300){ 
       textFila.setText("fila uno"); 
      } else if (distanzaFilaCinque > 300){ 
       textFila.setText("Ops!"); 
      } else { 
       textFila.setText("1"); 
      } 
     } else if (distanzaFilaDue < distanzaFilaUno && distanzaFilaDue < distanzaFilaTre && distanzaFilaDue < distanzaFilaQuattro && distanzaFilaDue < distanzaFilaCinque){ 
      if(distanzaFilaDue > 110 && distanzaFilaDue < 300){ 
       textFila.setText("fila due"); 
      } else if (distanzaFilaCinque > 300){ 
       textFila.setText("Ops!"); 
      } else { 
       textFila.setText("2"); 
      } 
     } else if (distanzaFilaTre < distanzaFilaUno && distanzaFilaTre < distanzaFilaDue && distanzaFilaTre < distanzaFilaQuattro && distanzaFilaTre < distanzaFilaCinque){ 
      if(distanzaFilaTre > 110 && distanzaFilaTre < 300){ 
       textFila.setText("fila tre"); 
      } else if (distanzaFilaCinque > 300){ 
       textFila.setText("Ops!"); 
      } else { 
       textFila.setText("3"); 
      } 
     } else if (distanzaFilaQuattro < distanzaFilaUno && distanzaFilaQuattro < distanzaFilaDue && distanzaFilaQuattro < distanzaFilaTre && distanzaFilaQuattro < distanzaFilaCinque){ 
      if(distanzaFilaQuattro > 110 && distanzaFilaQuattro < 300){ 
       textFila.setText("fila quattro"); 
      } else if (distanzaFilaCinque > 300){ 
       textFila.setText("Ops!"); 
      } else { 
       textFila.setText("4"); 
      } 
     } else if (distanzaFilaCinque < distanzaFilaUno && distanzaFilaCinque < distanzaFilaDue && distanzaFilaCinque < distanzaFilaTre && distanzaFilaCinque < distanzaFilaQuattro){ 
      if(distanzaFilaCinque > 110 && distanzaFilaCinque < 300){ 
       textFila.setText("fila cinque"); 
      } else if (distanzaFilaCinque > 300){ 
       textFila.setText("Ops!"); 
      } else { 
       textFila.setText("5"); 
      } 
     } 


    } else { 
     gps.showSettingsAlert(); 
    } 


} 

}

+0

getFila()是从类GPSTracker – Marco

+0

获取坐标后的方法设置Lat和Long使这个取代了,为a。 :'Double.parseDouble(p.replace(',','。'));' –

+0

嘿告诉我你的片段没有177线。 –

0

问题是在你的行中没有177.you越来越逗号那里,所以你需要将其替换(。)点将其解析为双精度型。 行

double distanzaFilaQuattro = Double.parseDouble(df1.format(distanzaQuattro)); 

更改为

double distanzaFilaQuattro = Double.parseDouble((df1.format(distanzaQuattro)).replace(",",".")); 
相关问题