2017-03-14 41 views
-2

我在Firebase中遇到了一個小問題。我有一個對象代表用戶信息和其他代表入口和出口的對象。問題是我只想提取存儲在Firebase上的用戶對象。有什麼辦法可以做到嗎?從Firebase中檢索單一類型的對象

謝謝。

這就是我的Json

{ 
    "Entradas-123456789E": { 
    "Entradas : 13-2-2017": { 
     "DetallesMon Mar 13 12:03:17 GMT+01:00 2017": { 
     "user": { 
      "dni": "123456789E" 
     } 
     } 
    } 
    }, 
    "Salidas-123456789E": { 
    "Salidas : 13-2-2017": { 
     "DetallesMon Mar 13 20:06:46 GMT+01:00 2017": { 
     "user": { 
      "dni": "123456789E" 
     } 
     } 
    } 
    }, 
    "Usuario_123456789E": { 
    "dni": "123456789E", 
    "lastname": "Prueba Prueba2", 
    "name": "Mireia", 
    "password: "######" 
    }, 
    "Usuario_536881138E": { 
    "dni": "53688138E", 
    "lastname": "Mheb", 
    "name": "Antonia", 
    "password:"######" 
    } 
} 

這是代碼

public class MainActivityFragment extends Fragment { 

private Intent takePictureIntent; 
FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef; 
private String pathFotoTemporal; 
private static final int REQUEST_TAKE_PHOTO = 1; 
private View view; 
private String key; 

//Expandable list Adapter 
ExpandableListAdapter listAdapter; 
ExpandableListView expListView; 
List<String> listDataHeader; 
HashMap<String, List<String>> listDataChild; 

//Users 
private List <User> items = new ArrayList<>(); 

//Obejeto a pasar 
User user = new User(); 
String password; 


//Buttons 
private EditText TextPass; 
private EditText TextDNI; 
private Button fichar; 

// Adding child data 
List<String> top250 = new ArrayList<String>(); 


@Override 
public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_main, container, false); 
    LeerFirebase(); 

    //Button 
    TextPass = (EditText) view.findViewById(R.id.IdpasswordUser); 
    //TextDNI = (EditText) view.findViewById(R.id.DNI); 

    // get the listview 
    expListView = (ExpandableListView) view.findViewById(R.id.lvExp); 

    // preparing list data 
    prepareListData(); 

    listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); 
    //expListView.setAdapter(listAdapter); 

    // setting list adapter 
    expListView.setAdapter(listAdapter); 

    //Write in database mesage myRef.setValue("Hello, World!"); 

    //Call Button fichar 
    fichar = (Button) view.findViewById(R.id.fichar); 
    fichar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      key = TextDNI.getText().toString(); 
      password = TextPass.getText().toString(); 

      //SuperUser 
      if(key.equalsIgnoreCase("********")&&password.equalsIgnoreCase("*******")){ 
       ((MainActivity) getActivity()).EditarUsuario(); 
       fichar.setVisibility(view.INVISIBLE); 
       TextPass.setVisibility(view.INVISIBLE); 
       TextDNI.setVisibility(view.INVISIBLE); 
      }else{ 
       LeerFirebase(); 
      } 

      //Para pasar de fragment hay que comprobar el dni y el password 
      /*((MainActivity) getActivity()).AbrirFichar(); 
      fichar.setVisibility(view.INVISIBLE); 
      TextPass.setVisibility(view.INVISIBLE);*/ 

     } 
    }); 
    return view; 
} 

private void LeerFirebase() { 
    myRef = database.getReference("Usuario" +"_"+ key+"/password"); 
    //+"/password" 
    // Read from the database 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      String value = dataSnapshot.getValue(String.class); 
      password = TextPass.getText().toString(); 
      if(password.equalsIgnoreCase(value)){ 
       //Pasamos por pantalla 
       Toast.makeText(getActivity(),"El usuario introducido es correcto",Toast.LENGTH_SHORT).show(); 
       //Pasamos al otro Fragment 
       ((MainActivity) getActivity()).AbrirFichar(TextDNI.getText().toString()); 
       fichar.setVisibility(view.INVISIBLE); 
       TextPass.setVisibility(view.INVISIBLE); 
       TextDNI.setVisibility(view.INVISIBLE); 
      }else { 
       Toast.makeText(getActivity(),"El usuario introducido o la Contraseña no son correctos ",Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError error) { 
      Toast.makeText(getActivity(),"Hay un error de lectura ",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

//On start button is Visible 
@Override 
public void onStart() { 
    final Button fichar = (Button) getView().findViewById(R.id.fichar); 
    EditText getpassword = (EditText) getView().findViewById(R.id.IdpasswordUser); 
    fichar.setVisibility(getView().VISIBLE); 
    getpassword.setVisibility(getView().VISIBLE); 
    super.onStart(); 
} 


//List Adapter 
private void prepareListData() { 
    listDataHeader = new ArrayList<String>(); 
    listDataChild = new HashMap<String, List<String>>(); 

    // Adding child data 
    listDataHeader.add("User Name"); 

    //Firebase carga 

    DatabaseReference ListaRef = database.getReference(); 

    // Read from the database 
    ListaRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // This method is called once with the initial value and again 
      // whenever data at this location is updated. 

      items.clear(); 
      User usuarios; 

      for(DataSnapshot i : dataSnapshot.getChildren()) { 
       usuarios = i.getValue(User.class); 
       items.add(usuarios); 
       top250.add(" " + usuarios.getName() + " " + usuarios.getLastname()); 
      } 
      Toast.makeText(getContext(), "Se han bajado " + items.size() + " Usuario", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancelled(DatabaseError error) { 
      Toast.makeText(getContext(), "Error descargando las recetas", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
     List<String> top = new ArrayList<String>(); 

    //Falta corregir no saca nada 
     for(int i = 0 ; i < top250.size(); i++){ 
      if (top250.get(i).isEmpty()||top250.equals(null)||top250.get(i).equals(null)||top250.get(i).equalsIgnoreCase("null null")){ 
       System.out.println("Noooo"); 
     }else{ 
      top.add(top250.get(i)); 
     } 
    } 
     listDataChild.put(listDataHeader.get(0), top); // Header, Child data 
} 
} 
+1

當您處理像Java這樣的圖靈語言完成語言時,問題的答案是「有沒有辦法做到這一點?幾乎總是「是」。 –

+0

你好Mireia,歡迎來到Stack Overflow!如果你改善你的問題,你更有可能得到有用的迴應。看看[this](http://stackoverflow.com/help/mcve)。例如,您應該刪除與Firebase查詢無關的所有代碼,並使您的標題更具描述性,並描述您嘗試的內容以及爲什麼它沒有起作用。 – Michiyo

+0

Mireia,te recomiendo que hagas preguntas detalladas,en es for foro no llevan bien que la gente pida ayuda sin saber que es lo lo que necesitan。 Lo ideal es que vengas con una pregunta concisa y as as la gente sepa como ayudarte。 Hoy endía,de una forma u otra,podráshacer lo que quieras。 – JonZarate

回答

0

你應該在兩個上級數組排序你的答案,你可以稱他們爲「用戶」和「記錄」,如果你喜歡,然後在每一個你把相應的記錄和你需要的那些

喜歡這個:

json structure

然後用火力地堡,你可以爲Extrac只有「用戶」的對象,而在其他客體與GSON解析,與你需要每個用戶一個迭代。

+0

謝謝大家的幫助和建議,我會嘗試改變構建Json的方式。原諒我的英語,你可以看到,這不是很好。 –

+0

別擔心,請記住,您可以隨時在西班牙語中使用stackoverflow –

1

JSON的變化,發現

{ 
    "Records" : { 
    "Enters" : { 
     "Entradas-5123445B" : { 
     "Entradas : 15-2-2017" : { 
      "DetallesWed Mar 15 10:08:59 GMT+01:00 2017" : { 
      "user" : { 
       "dni" : "5123445B" 
      } 
      } 
     } 
     }, 
     "Entradas-5128445A" : { 
     "Entradas : 15-2-2017" : { 
      "DetallesWed Mar 15 10:11:17 GMT+01:00 2017" : { 
      "user" : { 
       "dni" : "5128445A" 
      } 
      } 
     } 
     } 
    }, 
    "Exits" : { 
     "Salidas-5123445B" : { 
     "Salidas : 15-2-2017" : { 
      "DetallesWed Mar 15 10:09:46 GMT+01:00 2017" : { 
      "user" : { 
       "dni" : "5123445B" 
      } 
      } 
     } 
     } 
    } 
    }, 
    "Users" : { 
    "Usuario_5123445B" : { 
     "dni" : "5123445B", 
     "lastname" : "Apellido Apellidos", 
     "name" : "Prueba", 
     "password" : "######" 
    }, 
    "Usuario_5128445A" : { 
     "dni" : "5128445A", 
     "lastname" : "Apellido mwk", 
     "name" : "NjdNom", 
     "password" : "######" 
    } 
    } 
} 

和代碼

public class MainActivityFragment extends Fragment { 

    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef; 
    private View view; 
    private String key; 

    //Expandable list Adapter 
    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 

    //Users 
    private List <User> items = new ArrayList<>(); 

    //Obejeto a pasar 
    User user = new User(); 
    String password; 


    //Botones 
    private EditText TextPass; 
    private EditText TextDNI; 
    private Button fichar; 

    // Adding child data 
    List<String> top250 = new ArrayList<String>(); 


    @Override 
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
          Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.fragment_main, container, false); 
     LeerFirebase(); 

     //Botones 
     TextPass = (EditText) view.findViewById(R.id.IdpasswordUser); 

     // get the listview 
     expListView = (ExpandableListView) view.findViewById(R.id.lvExp); 

     // preparing list data 
     prepareListData(); 

     listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); 

     // setting list adapter 
     expListView.setAdapter(listAdapter); 

     //Llamamos al boton fichar 
     fichar = (Button) view.findViewById(R.id.fichar); 
     fichar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       key = TextDNI.getText().toString(); 
       password = TextPass.getText().toString(); 
       //SuperUsuario 
       if(key.equalsIgnoreCase("######")&&password.equalsIgnoreCase("#########")){ 
        ((MainActivity) getActivity()).EditarUsuario(); 
        fichar.setVisibility(view.INVISIBLE); 
        TextPass.setVisibility(view.INVISIBLE); 
        TextDNI.setVisibility(view.INVISIBLE); 
       }else{ 
        LeerFirebase(); 
       } 

      } 
     }); 
     return view; 
    } 

    private void LeerFirebase() { 
     myRef = database.getReference("Usuario" +"_"+ key+"/password"); 
     // Read from the database 
     myRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       String value = dataSnapshot.getValue(String.class); 
       password = TextPass.getText().toString(); 
       if(password.equalsIgnoreCase(value)){ 
        //Pasamos por pantalla 
        Toast.makeText(getActivity(),"El usuario introducido es correcto",Toast.LENGTH_SHORT).show(); 
        //Pasamos al otro Fragment 
        ((MainActivity) getActivity()).AbrirFichar(TextDNI.getText().toString()); 
        fichar.setVisibility(view.INVISIBLE); 
        TextPass.setVisibility(view.INVISIBLE); 
        TextDNI.setVisibility(view.INVISIBLE); 
       }else { 
        Toast.makeText(getActivity(),"El usuario introducido o la Contraseña no son correctos ",Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError error) { 
       Toast.makeText(getActivity(),"Hay un error de lectura ",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    //Al iniciarse crea el boton Visible 
    @Override 
    public void onStart() { 
     final Button fichar = (Button) getView().findViewById(R.id.fichar); 
     EditText getpassword = (EditText) getView().findViewById(R.id.IdpasswordUser); 
     fichar.setVisibility(getView().VISIBLE); 
     getpassword.setVisibility(getView().VISIBLE); 
     super.onStart(); 
    } 


    //List Adapter 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("User Name"); 

     //Firebase carga 

     DatabaseReference ListaRef = database.getReference("Users"); 

     // Read from the database 
     ListaRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       items.clear(); 
       User usuarios; 

       for(DataSnapshot i : dataSnapshot.getChildren()) { 
        usuarios = i.getValue(User.class); 
        items.add(usuarios); 
        top250.add(" " + usuarios.getName() + " " + usuarios.getLastname()); 
       } 
       Toast.makeText(getContext(), "Se han bajado " + items.size() + " Usuario", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onCancelled(DatabaseError error) { 
       Toast.makeText(getContext(), "Error descargando las recetas", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     listDataChild.put(listDataHeader.get(0), top250); 
    } 
} 

謝謝,它的工作原理。如果有人需要通過firebase列表獲取信息,我已經知道如何去做。

相關問題