将Firebase数据库中的值加载到Android

时间:2018-04-03 10:46:16

标签: android firebase firebase-realtime-database drop-down-menu autocompletetextview

我需要帮助将来自辅助Firebase数据库的数据实现到我的Android应用程序中的自动完成TextViews。我有一个包含汽车数据的数据库(汽车制造,汽车模型,发动机尺寸)。

我附上了一张图片,显示了我在数据库中设置数据的方式。

数据库图片

enter image description here

我希望有一个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()

1 个答案:

答案 0 :(得分:1)

我真的不明白你想要达到的目的,但我们假设你想要以下其中一个:

  • 在包含3个部分的列表中显示汽车列表,Make,Model和Engine Size的下拉列表: i建议使用RecyclerView使用TextViews(1表示Make,第二表示Model)和AppCompatSpinner将从Engine Size节点填充。您可以将这些库用作适配器:
  • FirebaseUI
  • Infinite-Fire我个人喜欢这个,因为当你到达最后一个项目时它有一个内置的loadMore。

  • 显示汽车品牌列表(在这种情况下制作),当用户选择项目时,会出现另一个包含模型和引擎尺寸的列表:i建议使用{{1}使用A RecyclerView进行制作,当用户点击某个项目时,您将项目名称保存在TextViews中并打开一个新活动,该活动仅显示所选的模型使用SharedPrefrances databaseRef .child( “汽车总动员”)orderByChild( “使”)equalesTo(getSelectedMake())。; 或者只是使用相同的方法将它们显示在AlertDialog中而不是使用服装布局...用于显示DATA您也可以使用上述库。

如果这不是你想要的,请详细解释你的问题,我会更新我的答案。

编辑:使用 SharedPreferences 来保存项目的引用是无稽之谈,这是我对Android的低经验的结果,而不是你可以使用意图。 putExtra()

示例

Firebase