2017-08-30 145 views
0

我有这样的结构在数据库获取给定数据的ID微调

Categorias_Produtos 
- ID 
---nome: Nome1 
- ID 
---nome: Nome2 

我在微调显示数据并捕获返回的数据的名称。没关系。

但我想捕获这个返回的数据的Id,我不知道该怎么做?

代码:

mDatabaseCategorias = FirebaseDatabase.getInstance().getReference().child("Categorias_Produtos"); 

     mResultadoCat = (TextView) findViewById(R.id.tvresultadoSpinnerCat); 

     mDatabaseCategorias.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       List<String> categorias = new ArrayList<>(); 

       for(DataSnapshot categoriasSnapshot: dataSnapshot.getChildren()){ 

        String nomeCateg = categoriasSnapshot.child("nome").getValue(String.class); 
        categorias.add(nomeCateg); 
       } 


       //spiners resultado 
       mSpinnerCateg = (Spinner) findViewById(R.id.spinnerCateg); 
       ArrayAdapter<String> categoriasAdapter = new ArrayAdapter<String>(CadastroServico.this, android.R.layout.simple_spinner_item, categorias); 
       categoriasAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       mSpinnerCateg.setAdapter(categoriasAdapter); 

       mSpinnerCateg.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
        @Override 
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

         String resultado = parent.getItemAtPosition(position).toString(); 
         mResultadoCat.setText(resultado); 


        } 

        @Override 
        public void onNothingSelected(AdapterView<?> parent) { 

        } 
       }); 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

据我了解,我需要他的名字一起莫名其妙地发送内容ID,以微调并从那里检索信息。

我想请一些想法!

+0

创建模型。 (构造者,制定者/获得者)。查询您的Firebase并将查询添加到新列表中(作为您的模型),然后当您选择一个名称时,将其从模型中拉出来...因此您也可以从中获取该ID。希望这是有道理的 – DroiDev

+0

是的它是有道理的。但我不知道我是否会知道如何去做。 @DroiDev – TiagoIB

+0

好的我发布了。我显然没有测试它。它可能无法工作。但那应该让你开始。 – DroiDev

回答

1

创建一个列表。

List<SpinnerModel> list; 
list = new ArrayList<>(); 

查询您的Firebase并将您拥有的内容添加到此列表中......成为新模型。

list.add(new SpinnerModel(objectID, objectName)); 

创建模型。

public class SpinnerModel { 
    String objectID; 
    String objectName; 

    public SpinnerModel(String objectID, String objectName){ 
     this.objectID = objectID; 
     this.objectName = objectName; 
    } 

    create getters.... 
} 

您可以使用列表和获取者填写您的微调器。然后,无论您点击什么,您都可以使用getObjectID获取该ID。

+0

对不起,我现在不能测试,但我完全理解这个想法。 Spinner中只有名字才能看到它吗? @DroiDev – TiagoIB

+0

是的。为微调器创建一个适配器,并且您可以循环访问您的列表并获取名称以显示....应该与列表视图适配器类似。 – DroiDev

1

我建议您将根据ID重复存储您的ID,这将为您简化事情,当你想要检索数据。 DENORMALIZATION是firebase或任何JSON nosql数据库的魔力词。

Categorias_Produtos 
- 15 
---nome: Nome1 
---id: 15 
- 16 
---nome: Nome2 
---id: 16