Java 如何为firebase中的一个特定孩子提供参考?如何阅读里面的孩子?请查看我的屏幕截图并帮助我解决此错误

Java 如何为firebase中的一个特定孩子提供参考?如何阅读里面的孩子?请查看我的屏幕截图并帮助我解决此错误,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我没有从firebase childMoreim(Moreimages)获取数据,但剩余数据显示在输出中 如何从firebase读取Moreim子对象实际上我正在从secondActivity读取数据 我正在使用viewpager在一个Imageview中显示更多的图像,我创建了适配器,适配器工作正常,它返回Imageview但不显示,因为我不知道引用Moreim 伙计们帮我解决这个空错误 SecondActivity: public class SecondActivit

我没有从firebase childMoreim(Moreimages)获取数据,但剩余数据显示在输出中 如何从firebase读取Moreim子对象实际上我正在从secondActivity读取数据

我正在使用viewpager在一个Imageview中显示更多的图像,我创建了适配器,适配器工作正常,它返回Imageview但不显示,因为我不知道引用Moreim 伙计们帮我解决这个空错误

  SecondActivity:
    
    public class SecondActivity extends AppCompatActivity {
        DatabaseReference ref;
     TextView Gname,Gnickname,Gdesc;
     ImageView Gimages;
        private ArrayList<String> imageUrls ;
        private static final String TAG = "SecondActivity";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            Gname = (TextView)findViewById(R.id.gettingname);
            Gnickname =(TextView)findViewById(R.id.gettingnickname);
            Gimages = (ImageView)findViewById(R.id.imageview);
            Gdesc = (TextView)findViewById(R.id.getdesc);
            imageUrls = new ArrayList<String>();
    
            ref = FirebaseDatabase.getInstance().getReference("Users");
            String UsersId = getIntent().getStringExtra("User");
    
             ref.child(UsersId).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if(snapshot.hasChildren()){
                        String name = (snapshot.child("Name").getValue()).toString();
                        String nick = (snapshot.child("Nickname").getValue()).toString();
                        // String imagee = (snapshot.child("images").getValue().toString());
                        String descc = (snapshot.child("Description").getValue().toString());
                        Gname.setText(name);
                        Gnickname.setText(nick);
                        //   Picasso.get().load(imagee).into(Gimages);
                        Gdesc.setText(descc);
    
                        for (DataSnapshot data : snapshot.getChildren()) {
                           imageUrls.add(data.child("Moreim").getValue().toString());
                        }
                        }
                    else {
                        Gname.setText("No data");
                    }
                    ViewPager viewPager = findViewById(R.id.viewimages);
                    ViewAdapter adapter = new ViewAdapter(SecondActivity.this,imageUrls);
                    viewPager.setAdapter(adapter);
                }

I'm having doubt in this part
 for (DataSnapshot data : snapshot.getChildren()) {
                           imageUrls.add(data.child("Moreim").getValue().toString());
                        }
how to read child Moreim ?

Error:
  Process: com.example.firebasesearchrec, PID: 5818
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at com.example.firebasesearchrec.SecondActivity$1.onDataChange(SecondActivity.java:55)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
SecondActivity:
公共类SecondActivity扩展了AppCompatActivity{
数据库参考文献;
text视图Gname、Gnickname、Gdesc;
图像视图图像;
私有ArrayList ImageURL;
私有静态最终字符串TAG=“SecondActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
Gname=(TextView)findViewById(R.id.gettingname);
Gnickname=(TextView)findViewById(R.id.getting昵称);
Gimages=(ImageView)findViewById(R.id.ImageView);
Gdesc=(TextView)findViewById(R.id.getdesc);
imageUrls=新的ArrayList();
ref=FirebaseDatabase.getInstance().getReference(“用户”);
字符串UsersId=getIntent().getStringExtra(“用户”);
ref.child(UsersId).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
if(snapshot.haschilds()){
字符串名称=(snapshot.child(“name”).getValue()).toString();
字符串nick=(snapshot.child(“昵称”).getValue()).toString();
//字符串imagee=(snapshot.child(“images”).getValue().toString());
字符串descc=(snapshot.child(“Description”).getValue().toString());
Gname.setText(名称);
Gnickname.setText(尼克);
//毕加索.get().load(imagee).into(Gimages);
Gdesc.setText(descc);
对于(DataSnapshot数据:snapshot.getChildren()){
add(data.child(“Moreim”).getValue().toString());
}
}
否则{
Gname.setText(“无数据”);
}
ViewPager ViewPager=findViewById(R.id.viewimages);
ViewAdapter=新的ViewAdapter(SecondActivity.this,imageUrls);
viewPager.setAdapter(适配器);
}
我对这部分有疑问
对于(DataSnapshot数据:snapshot.getChildren()){
add(data.child(“Moreim”).getValue().toString());
}
如何阅读儿童莫雷姆?
错误:
进程:com.example.firebasesearchrec,PID:5818
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString()”
位于com.example.firebasesearchrec.SecondActivity$1.onDataChange(SecondActivity.java:55)
位于com.google.firebase.database.core.ValueEventRegistration.firevent(ValueEventRegistration.java:75)
位于com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
位于com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
位于android.os.Handler.handleCallback(Handler.java:873)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:193)
试试看

推理:

据我所知,您需要一种从快照中的字段获取
ArrayList
的方法。除了使用模型类之外,简单地传递
ArrayList.class
是不行的,因为它不能考虑
通配符。因此在这个代码段中,泛型类型由
ArrayList
组成,然后传递。

我希望这有帮助


编辑:输入字段名。

谢谢兄弟的回复,有什么方法可以引用里面的Moreim孩子吗?你检查了字段名吗?我在建议的代码中输入了e个错误,现在修复了。谢谢兄弟,我得到了它,但我不知道什么是GenericTypeIndicator?在哪里使用它,只要简单地告诉我
snapshot.getValue()
接受一个类。将其视为一个模子,firebase需要知道哪些数据应该转换为哪个类。在
ArrayList
的情况下,只有
ArrayList.class
。但是正如您所知,
ArrayList
可以使用
通配符保存各种类型。这就是
通用指示符
的来源n、
GenericIndicator
可以准确地告诉firebase这是什么类型的
ArrayList
(在本例中为
String
)。感谢兄弟的回复和回答
GenericTypeIndicator<ArrayList<String>> t = new GenericTypeIndicator<ArrayList<String>>() {
                            };
                            imageUrls = snapshot
                                    .child("Moreim")
                                    .getValue(t);
for (DataSnapshot data : snapshot.getChildren()) {
                       imageUrls.add(data.child("Moreim").getValue().toString());
                    }