Android 为什么firebase数据库中的数据没有显示在Spinner中?
如本文所述。我想尝试我的编码应用程序。但它没有从我的firebase数据库中检索到任何数据。我就是想不出怎么修理它。谁能帮帮我吗。你知道我错过了什么吗 我的firebase数据库如下图所示:- 微调器编码:-Android 为什么firebase数据库中的数据没有显示在Spinner中?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,如本文所述。我想尝试我的编码应用程序。但它没有从我的firebase数据库中检索到任何数据。我就是想不出怎么修理它。谁能帮帮我吗。你知道我错过了什么吗 我的firebase数据库如下图所示:- 微调器编码:- mDatabase = FirebaseDatabase.getInstance().getReference(); mDatabase.keepSynced(true); mDatabase.child("Advertisement").child(mAuth.getUid()).a
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
}
});
mDatabase=FirebaseDatabase.getInstance().getReference();
mDatabase.keepSynced(true);
mDatabase.child(“广告”).child(mAuth.getUid()).addValueEventListener(新的ValueEventListener())
{
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot)
{
//最终列表名称=新的ArrayList();
ArrayList标识=新的ArrayList();
标识。添加(0,“选择学费中心”);
对于(DataSnapshot nameSnapshot:DataSnapshot.getChildren())
{
String tutionname=nameSnapshot.child(“ADStutionName”).getValue(String.class);
identity.add(学费名称);
}
ArrayAdapter nameAdapter=新的ArrayAdapter(RatingActivity.this,android.R.layout.simple\u spinner\u item,identity);
nameAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
mName.setAdapter(nameAdapter);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
mName.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener()
{
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id)
{
如果(位置==0)
{
//Toast.makeText(getApplicationContext(),“未选择任何项目”,Toast.LENGTH_LONG.show();
}
其他的
{
Toast.makeText(getApplicationContext(),parent.getItemAtPosition(position)+“Selected”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
未选择公共无效(AdapterView父级)
{
//TODO自动生成的方法存根
}
});
我希望问题出在getValue()方法上。Firebase getValue方法返回一个对象,您需要一个字符串。请修改此行以将对象转换为字符串-
String tuitionName = nameSnapshot.child("adstuitioname").getValue(String.class).toString();
添加侦听器,如下所示:
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) {
}
});
- 您的类包含所有参数和李>
- 用此类替换对象
@Override
public void onCancelled(DatabaseError databaseError) {
// Toast or print the databaseError, don't ignore it
}
然后查看正在添加侦听器的位置-mDatabase.child(“广告”).child(mAuth.getUid())。
,它是图片中-LNZ6…
级别的每个元素
对于该级别,您有一个对象的列表,因此您可能需要使用循环,如Firebase站点上的一些示例所示,建议您创建一个对象,但您仍然可以对某个字段使用child
方法
但若一个字段不存在,您将得到null值,并且适配器不能保存null,所以您必须忽略或设置一些默认值
ArrayList<String> identity = new ArrayList<>();
identity.add(0, "Choose Tuition Centre");
for (DataSnapshot nameSnapshot: dataSnapshot.getChildren()) {
String tuitionName = nameSnapshot.child("adstuitioname").getValue(String.class);
Log.d("DEBUG TUITION", String.valueOf(tuitionName); // look for this in your logs
identity.add(tuitionName == null ? "none" : tuitionName);
}
ArrayAdapter<String> nameAdapter =...
ArrayList identity=new ArrayList();
标识。添加(0,“选择学费中心”);
对于(DataSnapshot nameSnapshot:DataSnapshot.getChildren()){
String tutionname=nameSnapshot.child(“ADStutionName”).getValue(String.class);
Log.d(“调试学费”,String.valueOf(tutionname);//在日志中查找
identity.add(tutionname==null?“无”:tutionname);
}
ArrayAdapter名称适配器=。。。
如果应用程序关闭,则有一个日志猫您尚未上传到此帖子。您也忽略了取消后中的所有错误,因此请将问题放在那里。问题似乎出在哪里?@umagburman我的应用程序崩溃,因此无法确定微调器是否显示数据您可以在问题中以某种方式显示日志猫,以便我们可以understand@UmangBurman先生..我已经用其他方法修复了它,我无法从firebase数据库中检索数据。我已经编辑了我的问题。为什么是areaName?我正在使用这个,先生,String TutionName=nameSnapshot.child(“AdstuitionName”).getValue(String.class);先生……还是一样。但是我用其他方法解决了这个问题,我无法从firebase数据库检索数据。我已经编辑了我的问题。你能举个例子吗?1)从包含“adstutioname”的“自定义类”中获取你的键值。2) 外接程序列表我已经创建了我的广告java类,它由构造函数和getter组成。但是这个-->//从包含“adstutioname”的“自定义类”中获取键值,这个-->//外接程序列表。怎么做DSo现在您将获得广告实例。然后访问advision.getAdstutuioname()并将其添加到listString tutionName=dataSnapshot.child(“adstutionName”).getValue().toString();主席先生,我已尝试过,但仍然是一样,这项活动$2@6534}dataSnapshot={DataSnapshot@6536}“DataSnapshot{key=52ictJZU8TWWqOsGbpnQ6GDCYUv1,value=null}”标识={ArrayList@6537}size=1我想用Firebase数据库中的数据填充微调器。如果学费中心更改了它的名称,那么微调器中的列表数据也会更改。这样看来dataSnapshot.getChildren()
是空的,并且您没有将侦听器添加到正确的对象中。例如,您如何知道需要添加mAuth.getUid()
?这是正确的ID吗?另外,你在那里的评论是52ictJZU8TWWqOsGbpnQ6GDCYUv1
,但这不在所示的图片中
ArrayList<String> identity = new ArrayList<>();
identity.add(0, "Choose Tuition Centre");
for (DataSnapshot nameSnapshot: dataSnapshot.getChildren()) {
String tuitionName = nameSnapshot.child("adstuitioname").getValue(String.class);
Log.d("DEBUG TUITION", String.valueOf(tuitionName); // look for this in your logs
identity.add(tuitionName == null ? "none" : tuitionName);
}
ArrayAdapter<String> nameAdapter =...