2016-10-25 13 views
0

アカウントに結合された一意のユーザIDを使用してFirebaseにデータを挿入しています。アレイの1つに格納されたIDを持つfirebaseデータベースから情報を取得する方法

ユーザーには、そのIDを持つユーザーが挿入したデータのみを表示できるようにします。

ユーザが1台の電話機でDBに挿入し、ログインしていて同じIDを持つ別の電話機に移動すると、そのアカウントの特定のuser_idを持つアレイだけが表示されるようになります。私が今やっている何を

を私は、Googleの宣誓でUSER_IDを得る:

package it.bearz.view; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 

public class login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener{ 
    SignInButton signInButton; 
    GoogleApiClient mGoogleApiClient; 
    private static final String TAG = "SignInActivity"; 
    private static final int RC_SIGN_IN = 9001; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
     signInButton.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View v) { 
     switch(v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 
     } 
    } 

    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 
    } 

    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult: " + result.isSuccess()); 
     if(result.isSuccess()) { 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      Log.d("Login", "Hello! " + acct.getId()); 
      getSharedPreferences("USER", MODE_PRIVATE) 
        .edit() 
        .putString("user_id", acct.getId()) 
        .apply(); 
      Intent intent = new Intent(this, first.class); 
      startActivity(intent); 
     }else{ 

     } 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     Log.d(TAG, "onConnectionFailed" + connectionResult); 
    } 

} 

その後、私は(まだuser_idのではなく、実際の動画IDを使用します)データを挿入します。

SharedPreferences uid = this.getSharedPreferences("USER", MODE_PRIVATE); 
     String user_id = uid.getString("user_id", null); 

     // Write a message to the database 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference main_db = database.getReference(); 



     //Use the new reference to add the data 
     main_db.push().setValue(new user_object(user_id, "shfgfshgf")); 

データベースには、次のようになります。

DB

これを行う簡単な方法はありますか?

答えて

0

このユーザーが作成したすべてのノードを取得するには、このQuery使用することができます:

Query query = FirebaseDatabase.getInstance().getReference().orderByChild("user_id").equalTo(user_id); 

をそしてVIDEO_IDを取得するために、リスナーを追加します。

関連する問題