我需要帮助将来自辅助Firebase数据库的数据实现到我的Android应用程序中的自动完成TextViews。我有一个包含汽车数据的数据库(汽车制造,汽车模型,发动机尺寸)。
我附上了一张图片,显示了我在数据库中设置数据的方式。
数据库图片
我希望有一个TextView只显示所有“make”属性,另一个TextView只显示“model”属性,具体取决于用户选择的“make of car”。 (例如,如果用户选择奥迪,显示的型号仅为A4,A6,A3。如果用户选择大众,显示的型号仅为高尔夫,捷达,帕萨特),然后最终的TextView仅显示“引擎尺寸”这对应于所选择的“制造”和“模型”,因为每个车型都具有不同的发动机尺寸。
任何帮助都会非常感激,因为我已经被困在我的应用程序的这个元素上几个星期了,并尝试了无数不同的方法。
以下是我的课程和代码。应用程序运行时没有错误,但不会从数据库中检索数据。
public class VehicleSpec extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//Sets the layout according to the XML file
setContentView(R.layout.activity_vehicle_spec);
//FirebaseDatabase database = FirebaseDatabase.getInstance();
//
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("com.example.user.vel")
.setApiKey("AIzaSyBvBtL81H7aiUK90c3QfVccoU1CowKrmAA")
.setDatabaseUrl("https://finalyearproject-vel1-aac42.firebaseio.com/")
.build();
//
FirebaseApp.initializeApp(this, options, "secondary");
//
FirebaseApp app = FirebaseApp.getInstance("secondary");
FirebaseDatabase database2 = FirebaseDatabase.getInstance(app);
DatabaseReference dbref = database2.getReference();
DatabaseReference dbref2 = database2.getReference();
DatabaseReference dbref3 = database2.getReference();
//
dbref.child("Cars").addValueEventListener(new ValueEventListener()
{
public void onDataChange(DataSnapshot dataSnapshot)
{
final List<String> Cars = new ArrayList<String>();
for ( DataSnapshot suggestionSnap : dataSnapshot.getChildren() )
{
String suggestion = suggestionSnap.child("Make").getValue(String.class);
Cars.add(suggestion);
}//End For()
//XML TextView variable
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.auto);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(VehicleSpec.this, android.R.layout.simple_list_item_1, Cars);
actv.setAdapter(adapter);
}//End onDataChange()
public void onCancelled(DatabaseError databaseError)
{
}//End onCancelled()
});//End dbref ValueEventListener()
//
dbref2.child("Cars").addValueEventListener(new ValueEventListener()
{
public void onDataChange(DataSnapshot dataSnapshot)
{
final List<String> Cars = new ArrayList<String>();
for ( DataSnapshot suggestionSnap : dataSnapshot.getChildren() )
{
String suggestion = suggestionSnap.child("Model").getValue(String.class);
Cars.add(suggestion);
}//End for()
//XML TextView variable
AutoCompleteTextView actv1 = (AutoCompleteTextView) findViewById(R.id.auto1);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(VehicleSpec.this, android.R.layout.simple_list_item_1, Cars);
actv1.setAdapter(adapter1);
}//End onDataChange()
public void onCancelled(DatabaseError databaseError)
{
}//End onCancelled()
});//End dbref2 ValueEventListener()
//
dbref3.child("Cars").addValueEventListener(new ValueEventListener()
{
public void onDataChange(DataSnapshot dataSnapshot)
{
final List<String> Cars = new ArrayList<String>();
for (DataSnapshot suggestionSnap : dataSnapshot.getChildren())
{
String suggestion = suggestionSnap.child("Engine Size").getValue(String.class);
Cars.add(suggestion);
}//End for()
//XML TextView variable
AutoCompleteTextView actv2 = (AutoCompleteTextView) findViewById(R.id.auto2);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(VehicleSpec.this, android.R.layout.simple_list_item_1, Cars);
actv2.setAdapter(adapter2);
}//End onDataChange()
public void onCancelled(DatabaseError databaseError)
{
}//End onCancelled()
});//End dbref3 ValueEventListener()
}//End onCreate()
答案 0 :(得分:1)
我真的不明白你想要达到的目的,但我们假设你想要以下其中一个:
RecyclerView
使用TextViews
(1表示Make,第二表示Model)和AppCompatSpinner
将从Engine Size节点填充。您可以将这些库用作适配器:Infinite-Fire我个人喜欢这个,因为当你到达最后一个项目时它有一个内置的loadMore。
显示汽车品牌列表(在这种情况下制作),当用户选择项目时,会出现另一个包含模型和引擎尺寸的列表:i建议使用{{1}使用A RecyclerView
进行制作,当用户点击某个项目时,您将项目名称保存在TextViews
中并打开一个新活动,该活动仅显示所选的模型使用SharedPrefrances
databaseRef .child( “汽车总动员”)orderByChild( “使”)equalesTo(getSelectedMake())。;
或者只是使用相同的方法将它们显示在AlertDialog中而不是使用服装布局...用于显示DATA您也可以使用上述库。
如果这不是你想要的,请详细解释你的问题,我会更新我的答案。
编辑:使用 SharedPreferences 来保存项目的引用是无稽之谈,这是我对Android的低经验的结果,而不是你可以使用意图。 putExtra()强>
示例
Firebase