2017-06-19 84 views
-1

我正在研究依靠计算附近位置的应用程序 我使用firebase数据库存储纬度和经度,并将它们存储在一个值中,以便我可以读取所有值一次。 问题是,要计算距离我需要读取经纬度每一个单独的,但他们存储在一个字符串值。我能做什么 ?我想通过纬度和经度计算附近的位置

package com.example.felfel.drivers; 

    import android.content.Intent; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.EditText; 
    import android.Manifest; 
    import android.content.pm.PackageManager; 
    import android.location.Location; 
    import android.location.LocationListener; 
    import android.location.LocationManager; 
    import android.os.Build; 
    import android.provider.Settings; 
    import android.support.v4.app.ActivityCompat; 
    import android.widget.TextView; 
    import com.firebase.client.Firebase; 

    public class MainActivity extends AppCompatActivity { 
     private TextView t; 
     private LocationManager locationManager; 
     private LocationListener listener; 
     private Firebase locations; 
     private Firebase user; 
     private Firebase loc; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Firebase.setAndroidContext(this); 
      locations=new Firebase("https://drivers-b09df.firebaseio.com/locations"); 

      t = (TextView) findViewById(R.id.loc); 


      locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 


      listener = new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        t.append("\n " + location.getLongitude() + " " + location.getLatitude()); 
        user.setValue(location.getLongitude() + " " + location.getLatitude()); 
       } 

       @Override 
       public void onStatusChanged(String s, int i, Bundle bundle) { 

       } 

       @Override 
       public void onProviderEnabled(String s) { 

       } 

       @Override 
       public void onProviderDisabled(String s) { 

        Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        startActivity(i); 
       } 
      }; 

     } 


     public void enter(View view){ 

      EditText t1= (EditText) findViewById(R.id.name); 
      String name=t1.getText().toString(); 
      user = locations.child(name); 

      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET} 
          , 10); 
       } 



      } 
      locationManager.requestLocationUpdates("gps", 10000, 10, listener); 



     } 
    public void ShowDrivers(View view){ 
     Intent intent1=new Intent(this,ShowDrivers.class); 
     startActivity(intent1); 
    } 
    } 


    package com.example.felfel.drivers; 

    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 
    import android.widget.TextView; 

    import com.firebase.client.ChildEventListener; 
    import com.firebase.client.DataSnapshot; 
    import com.firebase.client.Firebase; 
    import com.firebase.client.FirebaseError; 
    import com.firebase.client.ValueEventListener; 

    import java.util.ArrayList; 
    import java.util.Map; 

    public class ShowDrivers extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_show_drivers); 

      final ArrayList<String>loc=new ArrayList<>(); 
      ListView lv= (ListView) findViewById(R.id.lv); 
      final ArrayAdapter<String>arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,loc); 
      lv.setAdapter(arrayAdapter); 

      Firebase locations=new Firebase("https://drivers-b09df.firebaseio.com/locations"); 
      locations.addChildEventListener(new ChildEventListener() { 
               @Override 
               public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

                String value=dataSnapshot.getValue(String.class); 
                TextView textView=(TextView)findViewById(R.id.tv1); 
                textView.append(value); 
                loc.add(value); 
                arrayAdapter.notifyDataSetChanged(); 

               } 

               @Override 
               public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

               } 

               @Override 
               public void onChildRemoved(DataSnapshot dataSnapshot) { 

               } 

               @Override 
               public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

               } 

               @Override 
               public void onCancelled(FirebaseError firebaseError) { 

               } 
              } 

      ); 
     } 
    } 
+0

我们无法预测你的数据是如何存储 –

回答

1

您必须拆分字符串才能获取值。例如,如果你的字符串是这样的:String position = "47.2173;-1.5534"然后执行:

String [] separated = position.split(";); 
separated[0];//Will contains the latitude 
separated[1];//Will contains the longitude 
+0

谢谢:)我怎么能转换成双? –

+0

'String text =“10,14”;' 'Double number = Double.parseDouble(text);' –