我正在构建一个应用程序,我在 Firestore 中使用 GeoPoint 保存位置,我想在单个地图活动中显示它们我已经尝试了几种方法,但它对我不起作用。
我正在接收集合中保存位置,它自己生成包含我的地理点的文档名称,所以请任何人帮助我并告诉我如何实现它,我正在共享用于将我的位置保存到射击基地的代码
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FieldValue;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.GeoPoint;
import com.google.firebase.firestore.ServerTimestamp;
import java.util.HashMap;
import java.util.Map;
public class DemoSave extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener {
private GoogleMap mMap;
GoogleApiClient mGoogleApiClient;
Location mLastLocation;
LocationRequest mLocationRequest;
private int REQUEST_CODE = 11;
SupportMapFragment mapFragment;
EditText mFullName,mFoodItem,mDescription,mPhone;
Button mSubmitBtn;
FirebaseAuth fAuth;
FirebaseFirestore fStore;
String userID;
private @ServerTimestamp String timestamp;
public static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo_save);
mFullName = findViewById(R.id.donorname);
mFoodItem = findViewById(R.id.fooditem);
mPhone = findViewById(R.id.phone);
mDescription = findViewById(R.id.description);
mSubmitBtn=findViewById(R.id.submit);
fAuth=FirebaseAuth.getInstance();
fStore= FirebaseFirestore.getInstance();
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mapFragment.getMapAsync(this);
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
buildGoogleApiClient();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
}
protected synchronized void buildGoogleApiClient(){
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(@NonNull Location location) {
mLastLocation = location;
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
mSubmitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String fullname = mFullName.getText().toString().trim();
String fooditem= mFoodItem.getText().toString().trim();
String description= mDescription.getText().toString().trim();
String phone= mPhone.getText().toString().trim();
String type= "donor";
if(TextUtils.isEmpty(fullname))
{
mFullName.setError("Name is Required.");
return;
}
if(TextUtils.isEmpty(fooditem))
{
mFoodItem.setError("Required.");
return;
}
if(phone.length() < 10)
{
mPhone.setError("Phone Number Must be >=10 Characters");
return;
}
userID = fAuth.getCurrentUser().getUid();
//DocumentReference documentReference = fStore.collection("donate").document(userID);
CollectionReference collectionReference = fStore.collection("donate");
GeoPoint geoPoint = new GeoPoint(location.getLatitude(),location.getLongitude());
Map<String,Object> user = new HashMap<>();
user.put("timestamp", FieldValue.serverTimestamp());
user.put("donor name",fullname);
user.put("food item",fooditem);
user.put("phone",phone);
user.put("description",description);
user.put("location",geoPoint);
user.put("userid",userID);
user.put("user type",type);
collectionReference.add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(getApplicationContext(),"Success!",Toast.LENGTH_SHORT).show();
Log.d(TAG,"Success!");
startActivity(new Intent(getApplicationContext(),MainActivity.class));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getApplicationContext(),"Error!",Toast.LENGTH_SHORT).show();
Log.w(TAG, "Error!", e);
}
});
/*.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getApplicationContext(),"Success!",Toast.LENGTH_SHORT).show();
Log.d(TAG,"Success!");
startActivity(new Intent(getApplicationContext(),MainActivity.class));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error!", e);
}
});*/
}
});
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = new LocationRequest();
//mLocationRequest.setInterval(1000);
//mLocationRequest.setFastestInterval(1000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE){
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
mapFragment.getMapAsync(this);
}else{
Toast.makeText(this,"Permission Denied", Toast.LENGTH_SHORT).show();
}
}
}
}