Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase:查询使用push()创建的数据列表_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase:查询使用push()创建的数据列表

Android Firebase:查询使用push()创建的数据列表,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我的Firebase数据库如下所示: { "lists" : { "-KZh-vvPcPGVqC22k2Bo" : { "dateCreated" : "2016-12-23", "listDescription" : "My Christmas Wish List for 2016", "listTitle" : "William's Christmas List", "user" : "ztGAx7eplGeZgdjqnegrtbf

我的Firebase数据库如下所示:

{
  "lists" : {
    "-KZh-vvPcPGVqC22k2Bo" : {
      "dateCreated" : "2016-12-23",
      "listDescription" : "My Christmas Wish List for 2016",
      "listTitle" : "William's Christmas List",
      "user" : "ztGAx7eplGeZgdjqnegrtbfuyUy2"
    }
  },
  "users" : {
    "8pJJuscerZRGdwGGImnWlCKSEed2" : {
      "email" : "example@example.com",
      "name" : "Alyson"
    },
    "ztGAx7eplGeZgdjqnegrtbfuyUy2" : {
      "email" : "example@example.com",
      "name" : "William"
    }
  }
}
我试图只返回用户字段等于登录用户UID的列表对象。这样,登录的用户就可以获得他的所有列表。但是我在查询列表中的数据时遇到了问题,因为push()生成的唯一键在用户创建新列表对象时用于追加到列表中。如何查询列表,以便只获取与登录用户的UID匹配的列表?到目前为止,我有这个

package com.fanciestw.listpro;

import android.content.DialogInterface;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;

public class allList extends AppCompatActivity {

    private FirebaseAuth mAuth = FirebaseAuth.getInstance();
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    private FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
    private DatabaseReference mList = mDatabase.getReference().child("lists");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_all_list);
        mAuthStateListener = new FirebaseAuth.AuthStateListener(){
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if(user != null) {
                    Log.d("User Activity", "User Signed In");
                } else {
                    Log.d("User Activity", "User Signed Out");
                    signout(getCurrentFocus());
                }
            }
        };
        mList.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                List newList = dataSnapshot.getValue(List.class);
                Log.d("List Returned", newList.listTitle + " " + newList.listDescription);
                updateList();
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                updateList();
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    @Override
    public void onStart(){
        super.onStart();
        Log.d("allList Activity", "onStart");
        mAuth.addAuthStateListener(mAuthStateListener);
    }

    @Override
    public void onStop(){
        super.onStop();
        Log.d("allList Activity", "onStop");
        if(mAuthStateListener != null) mAuth.removeAuthStateListener(mAuthStateListener);
    }

    public void addNewList(View view){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Add New List");

        LayoutInflater inflater = this.getLayoutInflater();
        final View dialogView = inflater.inflate(R.layout.add_new_list_form, null);

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(dialogView);

        // Set up the buttons
        builder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String title = ((EditText)dialogView.findViewById(R.id.add_list_title)).getText().toString();
                String desc = ((EditText)dialogView.findViewById(R.id.add_list_desc)).getText().toString();

                Log.d("New List Details", title + ", " + desc);
                //TODO::Store created list with title and desc in database
                List newList = new List(title, desc, mAuth.getCurrentUser().getUid());
                String newListID = mList.push().getKey();
                mList.child(newListID).setValue(newList);
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }

    public void updateList(){
        //Want to get lists where lists.user == firebaseAuth.getCurrentUser().UID();
    }

    public void signout(View view){
        mAuth.signOut();
        Intent intent = new Intent(this, login.class);
        startActivity(intent);
    }
}

声明

    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    private String userId = null;
    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();
    userId = mCurrentUser.getUid().toString();
    String UIDstring = (String) dataSnapshot.child("users").getValue();
初始化

    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    private String userId = null;
    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();
    userId = mCurrentUser.getUid().toString();
    String UIDstring = (String) dataSnapshot.child("users").getValue();
确定

if (userId.equals(UIDstring)) {
       //true
    } else {
      // false
   }

请与我们分享。还请将JSON树的图片替换为实际的JSON作为文本,您可以通过单击中的导出JSON链接轻松获得。将JSON作为文本使其具有可搜索性,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。如果您希望按用户id搜索“列表”表(其中每个列表对用户来说都是唯一的),您可能需要重新构造表以获得更好的查询功能。Try可能希望尝试使用“用户id”作为每个列表的键。这样,您就可以使用Firebase的查询命令(如“equalTo”)进行快速查询。请阅读。谢谢,我完全忽略了dataSnapshot。是否可以在URL中将id捕获为通配符?