我对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
}
}
答案 0 :(得分: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已经知道如何操作。
答案 1 :(得分:0)