Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Java Can';t为参数传递null';路径字符串';在child()中_Java_Android_Firebase_For Loop_Firebase Realtime Database - Fatal编程技术网

Java Can';t为参数传递null';路径字符串';在child()中

Java Can';t为参数传递null';路径字符串';在child()中,java,android,firebase,for-loop,firebase-realtime-database,Java,Android,Firebase,For Loop,Firebase Realtime Database,我目前正试图将Firebase数据库中的内容读取到RecyclerView中,但我想将它们从最后一个节点加载到第一个节点。因此,我决定将密钥放入一个数组,然后尝试从数组的末尾读取到前面,但是当我尝试访问密钥数组时,我看到的无法为child()中的参数“pathString”传递null错误 下面是我用来加载数据的方法: @Override public void onStart() { super.onStart(); FirebaseRecyclerAdapter<Upcomi

我目前正试图将Firebase数据库中的内容读取到
RecyclerView
中,但我想将它们从最后一个节点加载到第一个节点。因此,我决定将密钥放入一个数组,然后尝试从数组的末尾读取到前面,但是当我尝试访问密钥数组时,我看到的
无法为child()中的参数“pathString”传递null
错误

下面是我用来加载数据的方法:

@Override
public void onStart() {
    super.onStart();

FirebaseRecyclerAdapter<UpcomingList, UpcomingViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<UpcomingList, UpcomingViewHolder>(
            UpcomingList.class,
            R.layout.upcoming_event_row,
            UpcomingViewHolder.class,
            mDatabase
    ) {
        @Override
        protected void populateViewHolder(final UpcomingViewHolder viewHolder, UpcomingList model, int position) {

            /*String CurrentString = date.toString().trim();
            StringTokenizer tokens = new StringTokenizer(CurrentString, "/");
            final String first = tokens.nextToken();
            final String second = tokens.nextToken();*/

            //final String post_key = getRef(position).getKey();
            mDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    int i = 0;
                    for (DataSnapshot d : dataSnapshot.getChildren()) {
                        key[i] = d.getKey();
                        i++;
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });


            for (int counter = key.length - 1; counter >= 0; counter--) {
                viewHolder.setUpDate(first + "/" + key[counter]);
                mDatabase.child(key[counter]).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        StringBuilder builder = new StringBuilder();
                        for (DataSnapshot child : dataSnapshot.getChildren()) {
                            builder.append(child.getKey().toString() + "\n\n");

                        }
                        viewHolder.setName(builder.toString());
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
        }

    };
    upcomingRV.setAdapter(firebaseRecyclerAdapter);
}
@覆盖
public void onStart(){
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(
UpcomingList.class,
R.layout.Uncoming_event_行,
UpcomingViewHolder.class,
mDatabase
) {
@凌驾
受保护的void populateViewHolder(最终升级的viewHolder,升级列表模型,内部位置){
/*String CurrentString=date.toString().trim();
StringTokenizer令牌=新的StringTokenizer(CurrentString,“/”);
final String first=tokens.nextToken();
最后一个字符串second=tokens.nextToken()*/
//最后一个字符串post_key=getRef(位置).getKey();
mDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
int i=0;
对于(DataSnapshot d:DataSnapshot.getChildren()){
key[i]=d.getKey();
i++;
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
对于(int counter=key.length-1;计数器>=0;计数器--){
viewHolder.setUpDate(第一个+“/”+键[计数器]);
mDatabase.child(键[计数器]).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
StringBuilder=新的StringBuilder();
对于(DataSnapshot子项:DataSnapshot.getChildren()){
builder.append(child.getKey().toString()+“\n\n”);
}
setName(builder.toString());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
}
};
upcomingRV.setAdapter(firebaseRecyclerAdapter);
}

非常感谢您的帮助。

异步编程101正在折磨您。您需要确保需要
键[]
内容的代码位于加载键后调用的
onDataChange

在这种情况下,这意味着它应该看起来像这样

mDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int i = 0;
        for (DataSnapshot d : dataSnapshot.getChildren()) {
            key[i] = d.getKey();
            i++;
        }
        for (int counter = key.length - 1; counter >= 0; counter--) {
            viewHolder.setUpDate(first + "/" + key[counter]);
            mDatabase.child(key[counter]).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    StringBuilder builder = new StringBuilder();
                    for (DataSnapshot child : dataSnapshot.getChildren()) {
                        builder.append(child.getKey().toString() + "\n\n");

                    }
                    viewHolder.setName(builder.toString());
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    throw databaseError.toException(); // don't ignore errors        
                }
            });
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

这听起来像是在某个时刻将null传递给child()。考虑到您共享的代码中对
child()
的唯一调用是
mDatabase.child(key[counter])
,它看起来像
key[counter]
返回
null
@FrankvanPuffelen有关如何访问
key[]
数组的任何反馈?我试图放置第二个
addValueEventListener
,但我收到了
for
循环的意外令牌错误。