2

我想創建一個可以計算2個位置之間距離的應用程序,第一個是使用GPS查找,第二個是由我設置的。該應用程序未打開,並且錯誤位於:
MapsApp計算2點之間的距離,Android

line 61:distance = location.distanceTo(locationSede);

幫幫我!

package com.example.prova.mapapplicationprove; 
 

 
import android.Manifest; 
 
import android.app.Activity; 
 
import android.app.Fragment; 
 
import android.content.Context; 
 
import android.content.pm.PackageManager; 
 
import android.graphics.Point; 
 
import android.location.Criteria; 
 
import android.location.Location; 
 
import android.location.LocationListener; 
 
import android.location.LocationManager; 
 
import android.support.v4.app.ActivityCompat; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 
import android.view.Display; 
 
import android.view.Menu; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 
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.MarkerOptions; 
 

 
public class MainActivity extends AppCompatActivity implements LocationListener { 
 

 
    private float distance; 
 
    private float[] distfloat = new float[1]; 
 

 
    private final LatLng POINT = new LatLng(0, 0); //longitudine e latitudine 
 
     LocationManager locationManager; 
 
     @Override 
 
     protected void onCreate(Bundle savedInstanceState) { 
 
      super.onCreate(savedInstanceState); 
 
      setContentView(R.layout.activity_main); 
 

 
      GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
 

 

 
      map.setMyLocationEnabled(true); 
 
      LatLng sede = new LatLng(45.012447, 7.621013); 
 
      map.moveCamera(CameraUpdateFactory.newLatLngZoom(POINT, 1)); 
 
      
 
      map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 
 
      map.addMarker(new MarkerOptions().position(sede).title("Soluzioni")); 
 

 
      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
 
      Criteria criteria = new Criteria(); 
 
      String provider = locationManager.getBestProvider(criteria, true); 
 

 

 
      if(provider != null & !provider.equals("")) 
 
      { 
 
       Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER); 
 
       locationManager.requestLocationUpdates(provider, 2000, 1, this); 
 

 
       Location locationSede = new Location("Sede"); 
 
       locationSede.setLatitude(45.012447); 
 
       locationSede.setLongitude(7.621013); 
 
       distance = location.distanceTo(locationSede); //LINE NUMBER 61 
 
//    location.distanceBetween(sede.latitude,sede.longitude,location.getLatitude(),location.getLongitude(),distfloat); 
 

 

 
       if(location!=null) 
 
       { 
 
        onLocationChanged(location); 
 
       } 
 
       else{ 
 
        Toast.makeText(getApplicationContext(),"Location not found, GPS disabled.",Toast.LENGTH_LONG).show(); 
 
       } 
 
      } 
 
      else 
 
      { 
 
       Toast.makeText(getApplicationContext(),"Provider is null.",Toast.LENGTH_LONG).show(); 
 
      } 
 

 

 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
 

 

 
       return; 
 
      } 
 
     } 
 
     
 
     @Override 
 
     public void onLocationChanged(Location location) { 
 

 
      Toast.makeText(this,"Latitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude(),Toast.LENGTH_LONG).show(); 
 

 
      TextView textView2 = (TextView) findViewById(R.id.textview2); 
 
      TextView textView3 = (TextView) findViewById(R.id.textview3); 
 
      TextView textView4 = (TextView) findViewById(R.id.textview4); 
 

 
      String distanza = String.valueOf(distance); 
 
      //String distanza = String.valueOf(distfloat[0]); 
 

 
      textView2.setText("Latitude="+location.getLatitude()); 
 
      textView3.setText("Longitude="+ location.getLongitude()); 
 

 
      textView4.setText("Distance="+ distanza); 
 
     } 
 
     @Override 
 
     public void onStatusChanged(String s, int i, Bundle bundle) { 
 
     } 
 
     @Override 
 
     public void onProviderEnabled(String s) { 
 
     } 
 
     @Override 
 
     public void onProviderDisabled(String s) { 
 
     } 
 
}

<?xml version="1.0" encoding="utf-8"?> 
 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
    package="com.example.prova.mapapplicationprove"> 
 

 
    <uses-permission android:name="android.permission.INTERNET" /> 
 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS.google.android.providers.gsf.permission.READ_GSERVICES" /> 
 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Per usare il GPS --> 
 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
 

 
    <uses-feature 
 
     android:glEsVersion="0x00020000" 
 
     android:required="true" /> 
 

 
    <application 
 
     android:allowBackup="true" 
 
     android:icon="@mipmap/ic_launcher" 
 
     android:label="@string/app_name" 
 
     android:supportsRtl="true" 
 
     android:theme="@style/AppTheme"> 
 
     <activity android:name=".MainActivity"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity> 
 
     <meta-data 
 
      android:name="com.google.android.geo.API_KEY" 
 
      android:value="@string/google_maps_key" /> 
 

 
     <activity 
 
      android:name=".MapsActivity" 
 
      android:label="@string/title_activity_maps"> 
 
      <meta-data 
 
       android:name="android.support.PARENT_ACTIVITY" 
 
       android:value="com.example.prova.mapapplicationprove.MainActivity" /> 
 
     </activity> 
 
    </application> 
 

 
</manifest>

+2

添加您的logcat請hlep我們瞭解問題 –

+0

@SarahMaher對不起,什麼是logcat? –

+0

你有解決方案嗎? –

回答

1

我想你應該把

distance = location.distanceTo(locationSede); //LINE NUMBER 61 

到方法

@Override 
public void onLocationChanged(Location location) { 

} 

它會像

@Override 
public void onLocationChanged(Location location) { 
    if (location != null){ 
     Location locationSede = new Location("Sede"); 
     locationSede.setLatitude(45.012447); 
     locationSede.setLongitude(7.621013); 
     int distance = location.distanceTo(locationSede); 
    } 
} 
+0

錯誤移動到相應的行。 –

+0

@FrancescaBaka:你可以發佈logcat來檢查? –

0

如果要計算2點之間的距離,那麼你可以用它來Location.distanceBetween(A.Latitude, A.Longitude, B.Latitude, B.Longitude, result);

請參見下面的代碼如何在你的代碼impliment

float[] result = new float[1]; 
    Location.distanceBetween(location.getLatitude(), location.getLongitude(), locationSede.getLatitude(), locationSede.getLongitude(), result); 

    Log.e("TAG Result",""+result); //Here result is your distance 
    double km = result * 0.001; 
    Log.e("TAG Result",""+km); //Here distance in kilometer 

這裏當你想以公里的距離乘以0時的總距離.001像distancein_km=total_dis*001

+0

我已經用這種方法證明了,但反正有錯誤。 –

+0

你可以發佈你的錯誤日誌或見我[這裏](http://chat.stackoverflow.com/rooms/110492/) –

0

我解決了我的問題,錯誤是由提供程序引起的:我使用locationManager.allProvider();並以這種方式起作用。 無論如何感謝