Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 使用getter、setter和adapter从firebase中的特定节点/子节点检索数据有关详细信息,请参阅更多_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 使用getter、setter和adapter从firebase中的特定节点/子节点检索数据有关详细信息,请参阅更多

Android 使用getter、setter和adapter从firebase中的特定节点/子节点检索数据有关详细信息,请参阅更多,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正试图用firebase中的数据显示自定义listview。我在下面和下面有这个现有代码。我在构建它时没有遇到任何错误。但应用程序停止运行。我认为错误来自数据快照。我不知道我做错了什么。我是android开发新手。提前谢谢 我在MainActivity中有此代码 mRef = FirebaseDatabase.getInstance().getReference().child("Person"); mRef.addValueEventListener(new Val

我正试图用firebase中的数据显示自定义listview。我在下面和下面有这个现有代码。我在构建它时没有遇到任何错误。但应用程序停止运行。我认为错误来自数据快照。我不知道我做错了什么。我是android开发新手。提前谢谢

我在MainActivity中有此代码

   mRef = FirebaseDatabase.getInstance().getReference().child("Person");
        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                showData(dataSnapshot);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

}

private void showData(DataSnapshot dataSnapshot){
    String sName, sSport, sTown;
    for(DataSnapshot ds : dataSnapshot.getChildren()) {

 //   PeopleGetSet arr = new PeopleGetSet("name", "sport", "town");

        sName =   (ds.child("name").getValue(PeopleGetSet.class).getName());
        sSport =  (ds.child("sport").getValue(PeopleGetSet.class).getSport());
        sTown =   (ds.child("town").getValue(PeopleGetSet.class).getTown());

       /* Log.d(TAG, "Show Data name: " + info.getName());
        Log.d(TAG, "Show Data sport: " + info.getSport());
        Log.d(TAG, "Show Data town: " + info.getTown());*/

      PeopleGetSet info = new PeopleGetSet(sName, sSport, sTown);

        ArrayList<PeopleGetSet> array = new ArrayList<>();

        array.add(info);


        ViewDatabase adapter = new ViewDatabase(this, R.layout.adapter_view_layout, array);
        mListView.setAdapter(adapter);

    }
}

您正在将对象解析为字符串,这就是应用程序崩溃的原因。。 您所要做的就是将每个循环的快照传递给模型类,并将其添加到数组列表中

干杯:)

ArrayList数组=新的ArrayList();
私有void showData(DataSnapshot DataSnapshot){
字符串sName,sSport,sTown;
对于(DataSnapshot ds:DataSnapshot.getChildren()){
PeopleGetSet arr=ds.setvalue(PeopleGetSet.class);
//Object obj=ds.setvalue(Object.class);
数组。添加(信息);
}
ViewDatabase adapter=新的ViewDatabase(this,R.layout.adapter\u view\u layout,array);
mListView.setAdapter(适配器);
}

如果您可以共享错误消息或崩溃堆栈跟踪,以便更好地理解,则最好不要显示错误。应用程序刚刚停止运行。如果应用程序停止运行,您应该能够在Logcat中找到错误消息等待我重试。谢谢你,我加错了。它似乎无法将该值转换为stringIt。谢谢。还有一个问题,我还可以在自定义listview中添加另一个listview吗?例如,我将添加爱好列表?
public class ViewDatabase extends ArrayAdapter<PeopleGetSet> {
    private static final String TAG="ViewDatabase";
    private Context mContext;
    int mResource;

    public ViewDatabase(@NonNull Context context, int resource, @NonNull List<PeopleGetSet> objects) {
        super(context, resource, objects);
        this.mContext=context;
        mResource = resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        String name =getItem(position).getName();
        String sport =getItem(position).getSport();
        String town =getItem(position).getTown();

        PeopleGetSet person = new PeopleGetSet(name,sport, town);

        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView=inflater.inflate(mResource, parent, false);

        TextView tvName = (TextView)convertView.findViewById(R.id.textView);
        TextView tvSport = (TextView)convertView.findViewById(R.id.textView2);
        TextView tvTown = (TextView)convertView.findViewById(R.id.textView3);

        tvName.setText(name);
        tvSport.setText(sport);
        tvTown.setText(town);

        return convertView;
    }
}
08-17 16:29:22.764 4943-4943/org.pelco3.www.customlistadapter E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.pelco3.www.customlistadapter, PID: 4943
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type org.pelco3.www.customlistadapter.PeopleGetSet
    at com.google.android.gms.internal.firebase_database.zzkt.zzb(Unknown Source:259)
    at com.google.android.gms.internal.firebase_database.zzkt.zza(Unknown Source:0)
    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
    at org.pelco3.www.customlistadapter.MainActivity.showData(MainActivity.java:76)
    at org.pelco3.www.customlistadapter.MainActivity.access$100(MainActivity.java:22)
    at org.pelco3.www.customlistadapter.MainActivity$2.onDataChange(MainActivity.java:57)
    at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source:13)
    at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
    at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6938)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
ArrayList<PeopleGetSet> array = new ArrayList<>();
 private void showData(DataSnapshot dataSnapshot){
        String sName, sSport, sTown;
        for(DataSnapshot ds : dataSnapshot.getChildren()) {

      PeopleGetSet arr = ds.setvalue(PeopleGetSet.class);
    //Object obj= ds.setvalue(Object.class);


            array.add(info);



        }

   ViewDatabase adapter = new ViewDatabase(this, R.layout.adapter_view_layout, array);
            mListView.setAdapter(adapter);

}