为什么Firebase数据库中的数据未在Spinner中显示?

时间:2018-10-01 08:25:02

标签: android firebase firebase-realtime-database

如本link中所述。我想尝试我的编码应用程序。但是它没有从我的Firebase数据库中检索任何数据。我只是不知道如何解决它。有人可以帮帮我吗。有什么想法,我想念哪里了?

我的firebase数据库如下图所示:-

enter image description here

旋转编码:-

mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.keepSynced(true);

mDatabase.child("Advertisement").child(mAuth.getUid()).addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                //final List<String> name = new ArrayList<String>();
                ArrayList<String> identity = new ArrayList<>();
                identity.add(0, "Choose Tuition Centre");

                for (DataSnapshot nameSnapshot: dataSnapshot.getChildren())
                {
                    String tuitionName = nameSnapshot.child("adstuitioname").getValue(String.class);
                    identity.add(tuitionName);
                }

                ArrayAdapter<String> nameAdapter = new ArrayAdapter<String>(RatingActivity.this, android.R.layout.simple_spinner_item, identity);
                nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mName.setAdapter(nameAdapter);
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        mName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {
                if(position==0)
                {
                    //Toast.makeText(getApplicationContext(),"No Item Selected",Toast.LENGTH_LONG).show();
                }

                else
                {
                    Toast.makeText(getApplicationContext(),parent.getItemAtPosition(position) +" Selected",Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {
                // TODO Auto-generated method stub
            }
        });

3 个答案:

答案 0 :(得分:1)

按如下所示添加侦听器:

DatabaseReference mDatabaseRef =  
                            FirebaseDatabase.getInstance().getReference();
ArrayList<String> list=new ArrayList<>();
mDatabaseRef.child("Advertisement")
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                   for (DataSnapshot snapshot :dataSnapshot.getChildren()) 
                     {
                        Advertisementject advertisement= 
                                snapshot.getValue(Advertisement.class);
                        //replace Object.class with your class name
                        //get your key value here from your "Custom class" 
                        // which contains "adstutioname" 
                        // add in list
                        list.add(advertisement.getAdstutuioname());
                    }

                    //set adapter
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

生成这样的类

public class Advertisement{

@SerializedName("adstutuioname")
@Expose
private String adstutuioname;

public String getAdstutuioname() {
  return adstutuioname;
}

public void setAdstutuioname(String adstutuioname) {
  this.adstutuioname = adstutuioname;
}

}
  • 您的课程包含您的所有params和。
  • 用此类替换对象

答案 1 :(得分:0)

我希望问题出在您的getValue()方法上。 Firebase getValue方法返回一个Object,并且您期望使用String。请修改此行以将您的Object转换为String-

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-12">some test</div>

答案 2 :(得分:0)

不清楚是要阅读一次还是观看Difference between addValueEventListener() and addListenerForSingleValueEvent() of firebase

首先,请查看是否出现数据库错误

@Override
public void onCancelled(DatabaseError databaseError) {
    // Toast or print the databaseError, don't ignore it
}

然后查看您要在何处添加侦听器-mDatabase.child("Advertisement").child(mAuth.getUid()).,它在您的图片中是-LNZ6...级别的每个元素。

对于该级别,您有一个对象列表,因此您需要使用循环,并且如Firebase网站上的一些示例所示,建议您创建一个对象,但仍可以使用{{1} }尝试使用某个字段的方法

但是,如果字段不存在,则您将获得空值,并且适配器无法容纳空值,因此您必须忽略或设置一些默认值。

child