我在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
}
}
當您處理像Java這樣的圖靈語言完成語言時,問題的答案是「有沒有辦法做到這一點?幾乎總是「是」。 –
你好Mireia,歡迎來到Stack Overflow!如果你改善你的問題,你更有可能得到有用的迴應。看看[this](http://stackoverflow.com/help/mcve)。例如,您應該刪除與Firebase查詢無關的所有代碼,並使您的標題更具描述性,並描述您嘗試的內容以及爲什麼它沒有起作用。 – Michiyo
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