如何从 Firebase 实时数据库获取数据并将其显示在微调器中? [英] How to get data from Firebase Realtime Database and show it in a spinner?

查看:19
本文介绍了如何从 Firebase 实时数据库获取数据并将其显示在微调器中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

作为标题,如何从 firebase 获取数据并在 android studio 中显示?目前,因为我不知道如何使用微调器,所以我将 id eventSpinner 放在 XML 文件中作为 EditText 首先.有人知道如何从firebase获取数据并修改java文件吗?例如,我想在微调器中显示所有 eventid (1111,2222,3333....) 的所有 registerEventName (Google).我在下面添加了附件.感谢谁可以帮助我做到这一点.我搜索了 StackOverflow,但仍然不知道如何制作.

As title, how to get data from firebase and show in android studio? Currently, because I don't know how to use spinner, so I put the id eventSpinner in XML file as EditText first. Does someone know how to get the data from firebase and amend the java file? For example the I want to show all the registerEventName (Google) of all the eventid (1111,2222,3333....) in the spinner. I have added the attachment below. Thanks for advance who can help me to make it. I search around the StackOverflow but still don't know how to make it.

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".StaffAttendanceCheckIn">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="Staff Check In"
        android:textSize="24dp"
        android:gravity="center"
        android:layout_marginTop="10dp"
        android:textStyle="bold"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:id="@+id/eventName"
        android:layout_below="@+id/title">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textStyle="bold"
            android:textSize="18dp"
            android:text="Event Name: "/>

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:id="@+id/eventSpinner"
            android:text="Google Event"
            android:textSize="18dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/eventName"
        android:id="@+id/checkInTime">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textStyle="bold"
            android:textSize="18dp"
            android:text="Check In Time: "/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textSize="18dp"
            android:id="@+id/txtCurrentTime"
            android:text="Show time here"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/checkInTime"
        android:id="@+id/checkInDate">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textStyle="bold"
            android:textSize="18dp"
            android:text="Check In Date: "/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:id="@+id/txtCurrentDate"
            android:textSize="18dp"
            android:text="Show date here"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/checkInDate"
        android:id="@+id/checkInLocation">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textStyle="bold"
            android:textSize="18dp"
            android:text="Current Location: "/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/location"
            android:layout_marginLeft="13dp"
            android:textSize="18dp"
            android:text="Show location here"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/checkInLocation"
        android:id="@+id/account">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textStyle="bold"
            android:textSize="18dp"
            android:text="Account Check In: "/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/txtDisplayName"
            android:layout_marginLeft="13dp"
            android:textSize="18dp"
            android:text="Show acc name here"/>
    </LinearLayout>


    <com.google.android.gms.maps.MapView
        android:id="@+id/mapview"
        android:background="@color/darkGrey"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/account"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:apiKey="@string/GooglePlaceApi"
        android:enabled="true" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/mapview"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnCheckIn"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_margin="10dp"
            android:textColor="@color/white"
            android:layout_marginTop="10dp"
            android:background="@android:color/holo_red_dark"
            android:textSize="18dp"
            android:text="Confirm" />

    </LinearLayout>
</RelativeLayout>

Java 文件

package com.example.edward.neweventmanagementsystem;

import android.Manifest;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.example.edward.neweventmanagementsystem.Model.AttendanceInfo;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.places.Places;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.text.SimpleDateFormat;

import java.util.Date;
import java.util.Locale;

import static android.widget.Toast.LENGTH_SHORT;

public class StaffAttendanceCheckIn extends AppCompatActivity  {

    private TextView CheckInTime, CheckInDate, CheckInName;
    private EditText EventName;
    private Button btnCheckIn;

    private static final int REQUEST_LOCATION = 1;
    TextView CurrentLocation;
    LocationManager locationManager;
    String latitude,longitude;
    MapView map1;
    private GoogleMap map;
    private DatabaseReference mDatabaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_staff_attendance_check_in);

        EventName = (EditText) findViewById(R.id.eventSpinner);
        CheckInDate = (TextView) findViewById(R.id.txtCurrentDate);
        CheckInTime = (TextView) findViewById(R.id.txtCurrentTime);
        CheckInName = (TextView) findViewById(R.id.txtDisplayName);

        map1 = (MapView) findViewById(R.id.mapview);
        btnCheckIn = (Button) findViewById(R.id.btnCheckIn);

        map1.onCreate(savedInstanceState);

        mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("AttendanceRecord");
        System.out.println("Test mDatabase: "+mDatabaseReference);

        //Display the info in the spinner
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("EventName");

        SimpleDateFormat date = new SimpleDateFormat("EEEE dd MMM yyyy", Locale.ENGLISH);
        String currentDate = date.format(new Date());

        SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
        String currentTime = time.format(new Date());

        CheckInDate.setText(currentDate);
        CheckInTime.setText(currentTime);

        FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
        CheckInName.setText(currentFirebaseUser.getDisplayName());

        /**
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("EventName");

        System.out.println("Test Script: " + myRef); */

        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

        CurrentLocation = (TextView)findViewById(R.id.location);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            buildAlertMessageNoGps();

        } else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            getLocation();
        }


        btnCheckIn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                final ProgressDialog mDialog = new ProgressDialog(StaffAttendanceCheckIn.this);

                mDialog.setMessage("Please waiting...");
                mDialog.show();

                mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();

                        if(dataSnapshot.child(EventName.getText().toString()).child(CheckInDate.getText().toString()).child(currentFirebaseUser.getUid()).exists()){

                            mDialog.dismiss();
                            Toast.makeText(StaffAttendanceCheckIn.this, "The following account already check in on today for this event!", Toast.LENGTH_SHORT).show();
                        }
                        else {
                            AttendanceInfo attendanceInfo = new AttendanceInfo(EventName.getText().toString().trim(),
                                    CheckInTime.getText().toString().trim(),
                                    CheckInDate.getText().toString().trim(),
                                    CurrentLocation.getText().toString().trim(),
                                    CheckInName.getText().toString().trim());

                                    mDatabaseReference.child(EventName.getText().toString()).child(CheckInDate.getText().toString()).child(currentFirebaseUser.getUid()).setValue(attendanceInfo);

                        Toast.makeText(getApplicationContext(),"User "+currentFirebaseUser.getDisplayName()+ " check in successfully on " + CheckInDate.getText().toString(),LENGTH_SHORT).show();
                        Intent intent =  new Intent(StaffAttendanceCheckIn.this, com.example.edward.neweventmanagementsystem.StaffAttendance.class);
                        startActivity(intent);

                        }

                    }

                    @Override

                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }

        });
    }

//    @Override
//    public void onClick(View view) {
//
//    }

    private void getLocation() {
        if (ActivityCompat.checkSelfPermission(com.example.edward.neweventmanagementsystem.StaffAttendanceCheckIn.this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
                (com.example.edward.neweventmanagementsystem.StaffAttendanceCheckIn.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(com.example.edward.neweventmanagementsystem.StaffAttendanceCheckIn.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

        } else {
            Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

            Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

            Location location2 = locationManager.getLastKnownLocation(LocationManager. PASSIVE_PROVIDER);

            if (location != null) {
                double latti = location.getLatitude();
                double longi = location.getLongitude();

                latitude = String.valueOf(latti);
                longitude = String.valueOf(longi);

                CurrentLocation.setText("Lat = " + latitude + "
" + "Lon = " + longitude);
//                CurrentLocation.setText("latitude"+latitude);
//                CurrentLocation.setText("longitude"+longitude);

                final float ZOOM_MAP = 17.0f;
                final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
                map1.getMapAsync(new OnMapReadyCallback() {
                    @Override
                    public void onMapReady(GoogleMap googleMap) {

                        CameraUpdate myLocation = CameraUpdateFactory.newLatLngZoom(latLng, ZOOM_MAP);
                        googleMap.animateCamera(myLocation);
                        googleMap.getUiSettings().setAllGesturesEnabled(false
                        );
                    }
                });


//                CameraUpdate myLocation = CameraUpdateFactory.newLatLngZoom(latLng, ZOOM_MAP);
//                map.animateCamera(myLocation);


//                CameraUpdate myLocation = CameraUpdateFactory.newLatLngZoom(latLng, ZOOM_MAP);
//                System.out.println("Test Script" + myLocation);
//                map.animateCamera(myLocation);


            } else  if (location1 != null) {
                double latti = location1.getLatitude();
                double longi = location1.getLongitude();
                latitude = String.valueOf(latti);
                longitude = String.valueOf(longi);
//                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
//                System.out.println("Test Script: " +latLng);

                CurrentLocation.setText("Lat = " + latitude + "
" + "Lon = " + longitude);

            } else  if (location2 != null) {
                double latti = location2.getLatitude();
                double longi = location2.getLongitude();
                latitude = String.valueOf(latti);
                longitude = String.valueOf(longi);

                CurrentLocation.setText("Lat = " + latitude + "
" + "Lon = " + longitude);

            }else{

                Toast.makeText(this,"Unble to Trace your location",Toast.LENGTH_SHORT).show();

            }
        }
    }

    protected void buildAlertMessageNoGps() {

        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Please Turn ON your GPS Connection")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {
                        startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {
                        dialog.cancel();
                    }
                });
        final AlertDialog alert = builder.create();
        alert.show();
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        map1.onDestroy();
    }

    @Override
    public void onLowMemory(){
        super.onLowMemory();
        map1.onLowMemory();
    }

    @Override
    protected void onPause(){
        super.onPause();
        map1.onPause();
    }
    @Override
    protected void onResume(){
        super.onResume();
        map1.onResume();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        map1.onSaveInstanceState(outState);
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(this, StaffAttendance.class);
        startActivity(intent);
    }
}

示例图片

推荐答案

我想在微调器中显示所有 eventid (1111,2222,3333....) 的所有 registerEventName (Google).

I want to show all the registerEventName (Google) of all the eventid (1111,2222,3333....) in the spinner.

要获取 registerEventName 属性等于 Google 的所有 event 对象,请使用以下查询:

To get all event objects where registerEventName property is equal to Google, please use the following query:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef
    .child("ListOfEvents")
    .child(uid)
    .orderByChild("registerEventName")
    .equalsTo("Google");
query.addListenerForSingleValueEvent(/* ... */);

根据您的评论,如果您想将所有事件名称显示到一个微调器中,请使用以下代码行:

According to your comment, if you want to display all event names into a spinner, please use the following lines of code:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("ListOfEvents").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> eventList = new ArrayList<String>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String registerEventName = ds.child("registerEventName").getValue(String.class);
            eventList.add(registerEventName);
        }
        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, eventList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

这篇关于如何从 Firebase 实时数据库获取数据并将其显示在微调器中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆