Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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 显示累计距离gps。转换字符串/双精度_Java_Android_Distance - Fatal编程技术网

Java 显示累计距离gps。转换字符串/双精度

Java 显示累计距离gps。转换字符串/双精度,java,android,distance,Java,Android,Distance,我的android应用程序功能是在人行走时通过gps显示累计距离。以类似null9.55355.9346855.94574547的格式显示的距离值,并按秒递增。我的gos是敏感的位置变化非常快,即使我不移动我的手机。但主要的问题是我如何增加值,而不是使其增加长度。我正在考虑将字符串dist转换为Double1,double2+=valueofdouble1。然后将double2转换为字符串并显示我的文本视图。但我不知道如何在android中转换。首先,我甚至不确定我的想法是否可行 编辑:当我运行

我的android应用程序功能是在人行走时通过gps显示累计距离。以类似null9.55355.9346855.94574547的格式显示的距离值,并按秒递增。我的gos是敏感的位置变化非常快,即使我不移动我的手机。但主要的问题是我如何增加值,而不是使其增加长度。我正在考虑将字符串dist转换为Double1,double2+=valueofdouble1。然后将double2转换为字符串并显示我的文本视图。但我不知道如何在android中转换。首先,我甚至不确定我的想法是否可行

编辑:当我运行时,我的输出变为1.093507E7。为什么会有E7?它确实显示在我的文本视图上,但很快就崩溃了

我的java代码

    public class MainActivity extends Activity{

protected LocationManager locationManager;
EditText userNumberInput;
EditText userTextInput;
TextView distanceText;
TextView latitude;
TextView longitude;
double lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4;
String dist = "";
String value;
double finalDist1, finalDist2;
float[] result;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; // in Meters
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    distanceText=(TextView)findViewById(R.id.Distance);
    latitude=(TextView)findViewById(R.id.currentLat);
    longitude=(TextView)findViewById(R.id.currentLon);

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, myLocationListener); 
    Log.d("GPS Enabled", "GPS Enabled");  
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    String provider = locationManager.getBestProvider(criteria, true);
    Location location=locationManager.getLastKnownLocation(provider);

    if(location!= null)
    {
        //Display current location in Toast
        String message = String.format(
                "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude()
        );
        Toast.makeText(MainActivity.this, message,
                Toast.LENGTH_LONG).show();

        //Display current location in textview  
        latitude.setText("Current Latitude: " + String.valueOf(location.getLatitude())); 
        longitude.setText("Current Longitude: " + String.valueOf(location.getLongitude()));
        lat1 = location.getLatitude();
        lon1 = location.getLongitude();
    }
    else if(location == null)
    {
        Toast.makeText(MainActivity.this,
                "Location is null",    
                Toast.LENGTH_LONG).show();
    }

}

private CharSequence ToString(double latitude2) {
    // TODO Auto-generated method stub
    return null;
}

LocationListener myLocationListener = new LocationListener() 
{
    public void onLocationChanged(Location loc2) 
    {
        Toast.makeText(MainActivity.this,
                "Location has changed",    
                Toast.LENGTH_LONG).show();
        if(loc2 != null)
        {
            latitude.setText("Current Latitude: " + String.valueOf(loc2.getLatitude())); 
            longitude.setText("Current Longitude: " + String.valueOf(loc2.getLongitude()));
            float[] results = new float[1]; 
            Location.distanceBetween(lat1, lon1, loc2.getLatitude(), loc2.getLongitude(), results);
            System.out.println("Distance is: " + results[0]);               


            if(dist!=null &&  String.valueOf(results[0])!=null)
            {
                dist += String.valueOf(results[0]); // your String
                finalDist1 = Double.parseDouble(dist);
                finalDist2 += finalDist1;
                distanceText.setText(String.valueOf(finalDist2));
                Toast.makeText(MainActivity.this,
                        "Distance is accumulated",    
                        Toast.LENGTH_LONG).show();
                lat1=loc2.getLatitude();
                lon1=loc2.getLongitude();
            }


            Toast.makeText(MainActivity.this,
                    "Distance",    
                    Toast.LENGTH_LONG).show();
            lat1=loc2.getLatitude();
            lon1=loc2.getLongitude();
        }         
}

public void onProviderDisabled(String provider)
{
    Toast.makeText(MainActivity.this,
            "GPS is disabled",
            Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String provider)
{
    Toast.makeText(MainActivity.this,
            "GPS is enabled",
            Toast.LENGTH_LONG).show();
}
public void onStatusChanged(String provider, int status,
        Bundle extras)
{
    Toast.makeText(MainActivity.this,
            "GPS status changed",
            Toast.LENGTH_LONG).show();
}

};
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(myLocationListener);
}
@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, myLocationListener);
}}
原木猫

01-29 23:53:04.814: D/gralloc_goldfish(1076): Emulator without GPU emulation detected.
01-29 23:53:16.444: I/System.out(1076): Distance is: 1.093507E7
01-29 23:53:16.614: I/Choreographer(1076): Skipped 45 frames!  The application may be doing too much work on its main thread.
01-29 23:53:23.784: I/Choreographer(1076): Skipped 57 frames!  The application may be doing too much work on its main thread.
01-29 23:53:34.774: I/System.out(1076): Distance is: 6412915.0
01-29 23:53:34.774: D/AndroidRuntime(1076): Shutting down VM
01-29 23:53:34.774: W/dalvikvm(1076): threadid=1: thread exiting with uncaught exception (group=0xb3a3dba8)
01-29 23:53:34.814: E/AndroidRuntime(1076): FATAL EXCEPTION: main
01-29 23:53:34.814: E/AndroidRuntime(1076): Process: com.example.validationapp, PID: 1076
01-29 23:53:34.814: E/AndroidRuntime(1076): java.lang.NumberFormatException: Invalid double: "1.093507E76412915.0"
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.StringToReal.invalidReal(StringToReal.java:63)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.StringToReal.initialParse(StringToReal.java:114)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.StringToReal.parseDouble(StringToReal.java:263)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.Double.parseDouble(Double.java:295)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at com.example.validationapp.MainActivity$1.onLocationChanged(MainActivity.java:112)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at android.os.Handler.dispatchMessage(Handler.java:102)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at android.os.Looper.loop(Looper.java:136)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at   android.app.ActivityThread.main(ActivityThread.java:5017)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at java.lang.reflect.Method.invoke(Method.java:515)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-29 23:53:34.814: E/AndroidRuntime(1076):     at dalvik.system.NativeStart.main(Native Method)
01-29 23:53:38.814: I/Process(1076): Sending signal. PID: 1076 SIG: 9

看看你最近的编辑,我想你已经想得太多了。试试这样吧。请注意,我们仅为您的距离存储一个
double
值,并在用户每次旅行时增加该值

public class MainActivity extends Activity{

  protected LocationManager locationManager;
  EditText userNumberInput;
  EditText userTextInput;
  TextView distanceText;
  TextView latitude;
  TextView longitude;
  double lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4;
  double dist = 0;
  String value;
  float[] result;
  private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; // in Meters
  private static final long MINIMUM_TIME_BETWEEN_UPDATES = 0;

  // methods omitted

  LocationListener myLocationListener = new LocationListener() 
  {
    public void onLocationChanged(Location loc2) 
    {
      Toast.makeText(MainActivity.this,
      "Location has changed",    
      Toast.LENGTH_LONG).show();
      if(loc2 != null)
      {
        latitude.setText("Current Latitude: " + String.valueOf(loc2.getLatitude())); 
        longitude.setText("Current Longitude: " + String.valueOf(loc2.getLongitude()));
        float[] results = new float[1]; 
        Location.distanceBetween(lat1, lon1, loc2.getLatitude(), loc2.getLongitude(), results);
        System.out.println("Distance is: " + results[0]);               

        dist += results[0];            
        DecimalFormat df = new DecimalFormat("#.##"); // adjust this as appropriate
        distanceText.setText(df.format(dist));

        Toast.makeText(MainActivity.this,
        "Distance",    
        Toast.LENGTH_LONG).show();
        lat1=loc2.getLatitude();
        lon1=loc2.getLongitude();
      }         
    }

  // methods omitted

我尝试将dis转换为double,然后转换为string来显示它,但我的应用程序崩溃了。你能帮我吗?@Myst将堆栈跟踪添加到问题中。对不起,我是新手。我不知道什么是堆栈策略。它说什么是错误异常,是由什么引起的?我只发布所有的日志,我可以复制。应与前一行相同,因此它可能不是stacktrace..@Myst您需要删除行
dist+=String.valueOf(结果[0])。我删除了它,因为我不需要dist,所以我将代码更改为finalDist1=Double.valueOf(结果[0]);finalDist2+=finalDist1;distanceText.setText(String.valueOf(finalDist2));。如上面最新的日志目录所示。