我正在使用绑定到帐户的唯一用户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"));
数据库如下所示:
有一种简单的方法可以做到这一点吗?
答案 0 :(得分:0)
要获取此用户创建的所有节点,您可以使用此Query
:
Query query = FirebaseDatabase.getInstance().getReference().orderByChild("user_id").equalTo(user_id);
然后添加一个Listener来获取video_id。