如何从具有存储在其中一个阵列中的ID的firebase数据库中获取信息

时间:2016-10-25 21:18:42

标签: android firebase firebase-realtime-database firebase-security

我正在使用绑定到帐户的唯一用户ID将数据插入Firebase。

我希望用户只能看到插入了该ID的用户的数据。

因此,当用户使用一部电话登录数据库并进入同时登录并具有相同ID的另一部电话时,只能看到具有该帐户的特定user_id的数组。

我现在在做什么:

我使用Google OAth获取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

有一种简单的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

要获取此用户创建的所有节点,您可以使用此Query

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

然后添加一个Listener来获取video_id。