0

zurück Ich versuche, den Längen- und Breitengrad des aktuellen Standorts zu nehmen und in der Firebase-Datenbank zu belassen. Der Quellcode funktioniert gut, aber die Länge und Breite wird gespeichert als 0.0:Ort (Längengrad, Breitengrad) gibt 0

this is how it looks like in the database.

Wie kann ich dieses Problem beheben und den richtigen aktuellen Standort erhalten? Ich habe nichts gegen die Dutzende von Import-Klassen, ich habe noch nichts entfernt.

Es tut mir wirklich leid, wenn dies eine doppelte Frage ist.

public class Register extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    EditText edtemail, edtpass, edtnumber; 
    Button btnRegister, btnLogin, forgotpwdbtn; 
    private FirebaseAuth auth; 
    private DatabaseReference mDatabase; 


    private GoogleApiClient googleApiClient; 
    private Location location; 
    private double longitude; 
    private double latitude; 
    String mUserId; 


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


     btnRegister = (Button) findViewById(R.id.btnRegister); 
     btnLogin = (Button) findViewById(R.id.btnLogin); 
     forgotpwdbtn = (Button) findViewById(R.id.forgotpwdbtn); 

     btnRegister.setOnClickListener(this); 
     btnLogin.setOnClickListener(this); 
     forgotpwdbtn.setOnClickListener(this); 
     auth = FirebaseAuth.getInstance(); 


     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mUserId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 

     edtemail = (EditText) findViewById(R.id.edtemail); 
     edtpass = (EditText) findViewById(R.id.edtpass); 
     edtnumber = (EditText) findViewById(R.id.edtnumber); 


    } 


    public void onClick(View view) { 

     switch (view.getId()) { 

      case R.id.forgotpwdbtn: 
       Intent passwordIntent = new Intent(Register.this, ForgotPasswordActivity.class); 
       startActivity(passwordIntent); 
       break; 
      case R.id.btnLogin: 
       Intent intent = new Intent(Register.this, LoginActivity.class); 
       startActivity(intent); 
       break; 
      case R.id.btnRegister: 
       googleApiClient = new GoogleApiClient.Builder(this) 
         .addConnectionCallbacks(this) 
         .addOnConnectionFailedListener(this) 
         .addApi(LocationServices.API) 
         .build(); 

       final String key = mDatabase.child("data").push().getKey(); 
       final String email = edtemail.getText().toString().trim(); 
       final String password = edtpass.getText().toString().trim(); 
       final String number = edtnumber.getText().toString().trim(); 
       if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // ActivityCompat#requestPermissions 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user grants the permission. See the documentation 
        // for ActivityCompat#requestPermissions for more details. 
        return; 
       } 
       location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
       if (location != null) { 
        //Getting longitude and latitude 
        longitude = location.getLongitude(); 
        latitude = location.getLatitude(); 
       } 

       String lon = String.valueOf(longitude); 
       String lat = String.valueOf(latitude); 

       Item newItem = new Item(email, password, number, lon, lat); 
       Map<String, Object> itemValues = newItem.toMap(); 
       Map<String, Object> childUpdates = new HashMap<>(); 
       childUpdates.put("/data/" + mUserId + "/" + key, itemValues); 
       mDatabase.updateChildren(childUpdates); 

        auth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(Register.this, new OnCompleteListener<AuthResult>() { 


         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 

          if (task.isSuccessful()) { 

           Toast.makeText(Register.this, "Registration success", Toast.LENGTH_SHORT).show(); 
           Intent intent = new Intent(Register.this, LoginActivity.class); 
           startActivity(intent); 

          } else { 
           Toast.makeText(Register.this, "Registration failed." + task.getException(), Toast.LENGTH_SHORT).show(); 
          } 
         } 
        }); 
        break; 
       } 
     } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 
} 

Antwort

1

Sie stellen keine Verbindung mit GoogleApiClient her. Erstellen Sie das GoogleApiClient-Objekt in der Methode onCreate. Überschreiben Sie zwei weitere Methoden, onStart und onStop. In onStart Methode, verbinden Sie sich mit GoogleApiClient durch den Aufruf googleapiclient.connect(). Und in onStop Methode, trennen Sie den Client durch den Aufruf if(googleapiclient.isConnected()) { googleapiclient.disconnect() }.

+0

Ich tat, wie Sie sagten, aber ein neuer Fehler trat auf, als ich den Registerknopf drücke. "java.lang.NullPointerException: Versuch, die virtuelle Methode aufzurufen 'void com.google.android.gms.common.api.GoogleApiClient.connect()' für einen Null-Objektverweis" –

+0

Sie sind umgezogen 'googleApiClient = new GoogleApiClient.Builder (this) .addConnectionCallbacks (this) .addOnConnectionFailedListener (this) .addApi (LocationServices.API) .build(); 'Code zu' onCreate' Methode ?? –

+0

Ja, ich tat, immer noch das Gleiche. Gestoppt nach Drücken der Registriertaste. –

Verwandte Themen