Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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 从android中的Firebase实时数据库检索ListView上的数据不工作_Java_Android_Firebase_Listview_Adapter - Fatal编程技术网

Java 从android中的Firebase实时数据库检索ListView上的数据不工作

Java 从android中的Firebase实时数据库检索ListView上的数据不工作,java,android,firebase,listview,adapter,Java,Android,Firebase,Listview,Adapter,我正在尝试从firebase动态检索数据并在页面上显示它们,但当我这样做时,屏幕上没有错误,只有一个空屏幕出现,请参见下图 有人能帮我吗 这是我的Firebase数据库结构 这是我的java代码: package com.example.atheer.booklyv1; import android.app.ListActivity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; impor

我正在尝试从firebase动态检索数据并在页面上显示它们,但当我这样做时,屏幕上没有错误,只有一个空屏幕出现,请参见下图

有人能帮我吗

这是我的Firebase数据库结构

这是我的java代码:

package com.example.atheer.booklyv1;

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

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.ValueEventListener;

import java.util.ArrayList;

public class orgServices extends AppCompatActivity {

ListView ListView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<Service> list;
ArrayAdapter<Service>  adapter;
Service ser;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_org_services);




        ser = new Service();
        ListView = (ListView) findViewById(R.id.ListView);
        database = FirebaseDatabase.getInstance();
        ref =database.getReference().child("client");
        list = new ArrayList<>();
        adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);
        ref.addValueEventListener(new ValueEventListener(){


            @Override
            public void onDataChange(DataSnapshot dataSnapshot){
for(DataSnapshot ds: dataSnapshot.getChildren())
{
    if (dataSnapshot.hasChild("services")){
    ser= ds.getValue(Service.class);
    list.add(ser);}

}
ListView.setAdapter(adapter);
            }



            @Override
            public void onCancelled(DatabaseError databaseError){


            }
        });

    }




}
这些消息来自运行部分:

V/FA: Recording user engagement, ms: 748436
V/FA: Connecting to remote service
V/FA: Activity paused, time: 1449333
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=748436, firebase_screen_class(_sc)=Service, firebase_screen_id(_si)=-4092656992746331939}]
I/atheer.booklyv: Waiting for a blocking GC ProfileSaver
V/FA: Connection attempt already in progress
V/FA: Connection attempt already in progress
      Activity resumed, time: 1449354
D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Service, firebase_previous_id(_pi)=-4092656992746331939, firebase_screen_class(_sc)=Mynavigation, firebase_screen_id(_si)=-4092656992746331940}]
I/atheer.booklyv: WaitForGcToComplete blocked ProfileSaver on ProfileSaver for 62.701ms
V/FA: Connection attempt already in progress
D/EGL_emulation: eglMakeCurrent: 0xebd05420: ver 3 0 (tinfo 0xebd033e0)
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 4
V/FA: Recording user engagement, ms: 3384
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@6a2bdcc
V/FA: Activity paused, time: 1452737
V/FA: onActivityCreated
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=3384, firebase_screen_class(_sc)=Mynavigation, firebase_screen_id(_si)=-4092656992746331940}]
V/FA: Activity resumed, time: 1452998
D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Mynavigation, firebase_previous_id(_pi)=-4092656992746331940, firebase_screen_class(_sc)=Service, firebase_screen_id(_si)=-4092656992746331938}]
D/EGL_emulation: eglMakeCurrent: 0xebd05420: ver 3 0 (tinfo 0xebd033e0)

问题在于使用dataSnapshot进行检索。您要做的是,如果您找到一个名为services的子级,您将尝试从services.class中的当前dataSnapshot获取数据

您应该做的是,在您选择的子级上设置正确的数据库引用

因此,您可以在if语句中尝试以下操作,而不是使用用于检索的代码:

字符串名称=dataSnapshot.childname.getValueString.class; 字符串名称=dataSnapshot.childprice.getValueInteger.class; 字符串名称=dataSnapshot.childrating.getValueInteger.class; 字符串名称=dataSnapshot.childtotalpoint.getValueInteger.class; 但是,如果希望在不设置不同的getValue语句的情况下获取所有值,可以使用map来实现。这可以帮助您同时从数据库中更新和检索值

您可以参考以下链接了解有关使用map从FirebaseDatabase检索数据的更多信息


要解决此问题,只需移动以下代码行:

adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);

设置适配器时,您的列表为空,这就是为什么会出现空屏幕。

这些日志没有帮助。相反,尝试添加firebase.ListView的json或数据库结构;使其成为listVIew listVIew.setAdapteradapter;我建议您从问题中删除一些不必要的代码和日志,因为较长的问题不会得到更多的关注。嗨,Reema!你试过我上面的解决方案了吗,有效吗?
package com.example.atheer.booklyv1;

import android.support.v7.app.AppCompatActivity;

public class Service extends AppCompatActivity {

private int price;
private String name;
private int totalpoint;
private int rating;


public Service(){

}

 public Service (String name){
    this.name=name;
 }

 public Service (String name, int price , int totalpoint , int rating ){
    this.name=name;
    this.price=price;
    this.totalpoint=totalpoint;
    this.rating=rating;


 }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getTotalpoint() {
        return totalpoint;
    }

    public void setTotalpoint(int totalpoint) {
        this.totalpoint = totalpoint;
    }

    public int getRating() {
        return rating;
    }

    public void setRating(int rating) {
        this.rating = rating;
    }
}
V/FA: Recording user engagement, ms: 748436
V/FA: Connecting to remote service
V/FA: Activity paused, time: 1449333
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=748436, firebase_screen_class(_sc)=Service, firebase_screen_id(_si)=-4092656992746331939}]
I/atheer.booklyv: Waiting for a blocking GC ProfileSaver
V/FA: Connection attempt already in progress
V/FA: Connection attempt already in progress
      Activity resumed, time: 1449354
D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Service, firebase_previous_id(_pi)=-4092656992746331939, firebase_screen_class(_sc)=Mynavigation, firebase_screen_id(_si)=-4092656992746331940}]
I/atheer.booklyv: WaitForGcToComplete blocked ProfileSaver on ProfileSaver for 62.701ms
V/FA: Connection attempt already in progress
D/EGL_emulation: eglMakeCurrent: 0xebd05420: ver 3 0 (tinfo 0xebd033e0)
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 4
V/FA: Recording user engagement, ms: 3384
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@6a2bdcc
V/FA: Activity paused, time: 1452737
V/FA: onActivityCreated
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=3384, firebase_screen_class(_sc)=Mynavigation, firebase_screen_id(_si)=-4092656992746331940}]
V/FA: Activity resumed, time: 1452998
D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Mynavigation, firebase_previous_id(_pi)=-4092656992746331940, firebase_screen_class(_sc)=Service, firebase_screen_id(_si)=-4092656992746331938}]
D/EGL_emulation: eglMakeCurrent: 0xebd05420: ver 3 0 (tinfo 0xebd033e0)
adapter = new ArrayAdapter<Service>(this, R.layout.service_info,R.id.serviceInfo,list);
ListView.setAdapter(adapter);