2016-11-12 1 views
0

Ich möchte Primärschlüssel an Firebase von Android-Handy senden, damit ich erkennen kann, wer mir die Daten sendet. Also mache ich im Grunde eine Anwendung, die Bild an Server sendet. Ich möchte überprüfen, wer mir etwas schickt. Also brauche ich einen Primärschlüssel. Kann mir jemand dabei helfen? Wie kann ich etwas Einzigartiges an Firebase Server senden?Ich möchte einen Primärschlüssel an Firebase senden

public void SignUP(View v){ 

     EditText name = (EditText) findViewById(R.id.editTextRegistrationName); 
     EditText contact = (EditText) findViewById(R.id.editTextRegistrationContact); 
     EditText city = (EditText) findViewById(R.id.editTextRegistrationCity); 
     EditText email = (EditText) findViewById(R.id.editTextRegistrationEmail); 
     EditText pass = (EditText) findViewById(R.id.editTextRegistrationPassword); 

     String userName = name.getText().toString(); 
     String userContact = contact.getText().toString(); 
     String userCity = city.getText().toString(); 
     String userEmail = email.getText().toString(); 
     String userPassword = pass.getText().toString(); 

     if(isOnline() == true){ 
      FirebaseDatabase database = FirebaseDatabase.getInstance(); 
      DatabaseReference myRef = database.getReference("Users").push(); 


      DatabaseReference nam = myRef.child("Name"); 
      nam.setValue(userName); 

      DatabaseReference contac = myRef.child("Contact"); 
      contac.setValue(userContact); 

      DatabaseReference cit = myRef.child("City"); 
      cit.setValue(userCity); 

      DatabaseReference emai = myRef.child("Email"); 
      emai.setValue(userEmail); 

      DatabaseReference passwor = myRef.child("Password"); 
      passwor.setValue(userPassword); 

     } 
     else{ 
       bal.addUser(new UserBean(0,userName,userContact,userCity,userEmail,userPassword)); 
       Toast.makeText(this, "Data Save in DB", Toast.LENGTH_SHORT).show(); 
    } 
+0

FIrebaseAuth.getInstance(). GetCurrent(). Getuid() –

+0

was passiert im Inneren addUser()? –

+0

Eigentlich, wenn Internet nicht verbunden dann speichern in db, dann wenn es mit dem Server verbunden dann senden alle db Daten an den Server so etwas das ist, warum ich dies – Alex

Antwort

0

UPDATE

Vorausgesetzt, dass Sie den Benutzer automatisch generierte ID erhalten möchten Sie einfach die FirebaseAuth und haben für jeden Benutzer die eindeutige ID mit ein paar Zeilen Code importieren. Es besteht keine Notwendigkeit, sich darüber Gedanken zu machen, dass dies explizit an den Server gesendet wird, da die Daten automatisch synchronisiert werden. Sie können die Benutzer-ID einfach verwenden, wenn Sie sie in Ihrem Code benötigen, während Sie Ihren JSON-Baum aufbauen. Wenn Sie es zu Ihren Daten hinzufügen möchten, ist dies auch ein einfacher Vorgang, den Sie bereits für andere Datenpunkte verwenden. Die meisten Kommentare, die Sie in Kommentaren erwähnen, sind bereits im SDK enthalten. Es besteht also keine Notwendigkeit, diese Funktionen von Grund auf neu zu erfinden.

Der folgende Code wird verwendet, um Auth innerhalb Ihrer Aktivität zu aktivieren.

private FirebaseAuth mAuth; 
// ... 
mAuth = FirebaseAuth.getInstance(); 
EmailPasswordActivity.java 

Dieses einfache Beispiel aus der Dokumentation zeigen, wie jemand zur Authentifizierung eine E-Mail und Passwort ...

private FirebaseAuth.AuthStateListener mAuthListener; 

// ... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // ... 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       // User is signed in 
       Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
      } else { 
       // User is signed out 
       Log.d(TAG, "onAuthStateChanged:signed_out"); 
      } 
      // ... 
     } 
    }; 
    // ... 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 
EmailPasswordActivity.java 

mAuth.signInWithEmailAndPassword(email, password) 
     .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful()); 

       // If sign in fails, display a message to the user. If sign in succeeds 
       // the auth state listener will be notified and logic to handle the 
       // signed in user can be handled in the listener. 
       if (!task.isSuccessful()) { 
        Log.w(TAG, "signInWithEmail:failed", task.getException()); 
        Toast.makeText(EmailPasswordActivity.this, R.string.auth_failed, 
          Toast.LENGTH_SHORT).show(); 
       } 

       // ... 
      } 
     }); 
EmailPasswordActivity.java 

Dieser Beispielcode zeigt, wie Benutzer witho erfordert jedes Passwort anonym authentifizieren.

private FirebaseAuth.AuthStateListener mAuthListener; 

// ... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // ... 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       // User is signed in 
       Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
      } else { 
       // User is signed out 
       Log.d(TAG, "onAuthStateChanged:signed_out"); 
      } 
      // ... 
     } 
    }; 
    // ... 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 
AnonymousAuthActivity.java 

mAuth.signInAnonymously() 
     .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       Log.d(TAG, "signInAnonymously:onComplete:" + task.isSuccessful()); 

       // If sign in fails, display a message to the user. If sign in succeeds 
       // the auth state listener will be notified and logic to handle the 
       // signed in user can be handled in the listener. 
       if (!task.isSuccessful()) { 
        Log.w(TAG, "signInAnonymously", task.getException()); 
        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", 
          Toast.LENGTH_SHORT).show(); 
       } 

       // ... 
      } 
     }); 
AnonymousAuthActivity.java 

(FirebaseAuth Guide)

Aktivieren der Offline-Datensynchronisation: (Data offline info)

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

Wenn Sie einen bestimmten Zweig des Datenbaumes zwingen wollen lokal gespeichert werden, können Sie auch machen eine Referenz auf diesen Ort und rufen Sie die keepSynced-Funktion auf True. Die Kommentare in den Header zeigen:

/** * Durch den Aufruf keepSynced:YES auf einer Stelle, die Daten für diesen Standort werden automatisch heruntergeladen und * synchron gehalten, auch wenn keine Zuhörer für diesen Ort gebunden sind, . Während ein Standort * synchronisiert gehalten wird, wird er außerdem nicht aus dem persistenten Festplattencache entfernt. * * @param keepSynced Pass JA, um diese Position synchronisiert zu halten, NO, um die Synchronisation zu beenden. */

ORIGINAL ANTWORT

Ich glaube, Sie können den Beispielcode für Android auf dem website zur Kasse wollen. Grundsätzlich denke ich, dass die push(). GetKey() die automatisch generierte ID wie angegeben zurückgeben sollte. Mein weg davon ist, dass der Akt der Buchung den Schlüssel automatisch generieren wird.

private void writeNewPost(String userId, String username, String title, String body) { 
    // Create new post at /user-posts/$userid/$postid and at 
    // /posts/$postid simultaneously 
    String key = mDatabase.child("posts").push().getKey(); 
    Post post = new Post(userId, username, title, body); 
    Map<String, Object> postValues = post.toMap(); 

    Map<String, Object> childUpdates = new HashMap<>(); 
    childUpdates.put("/posts/" + key, postValues); 
    childUpdates.put("/user-posts/" + userId + "/" + key, postValues); 

    mDatabase.updateChildren(childUpdates); 
} 
Verwandte Themen