我正在开发取决于计算附近位置的应用 我使用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