Запрос на основе даты из базы данных Firebase в реальном времени, когда дата сохраняется в виде строки - PullRequest
0 голосов
/ 31 января 2019

Можно ли выполнить запрос на основе даты из базы данных Firebase, если дата сохранена в виде строки?Или это можно конвертировать?Я хочу иметь возможность искать записи в определенном диапазоне дат, но даты сохраняются и извлекаются в виде строк.Я использую DatePickerDiaglog, чтобы установить дату, когда я добавляю запись.Ниже приведен метод добавления записи:

private void addAnimal(){
        String breed = editTextBreed.getText().toString().trim();
        String gender = spinnerGender.getSelectedItem().toString();
        String source = editTextSource.getText().toString().trim();
        String DOB = mDisplayDate.getText().toString().trim();
        String tag = editTextTagNumber.getText().toString().trim();

        if(TextUtils.isEmpty(breed)){
            Toast.makeText(this, "You should enter a breed", Toast.LENGTH_LONG).show();
        }
        else if(TextUtils.isEmpty(source)){
            Toast.makeText(this, "You should enter a source", Toast.LENGTH_LONG).show();
        }
        else if (TextUtils.isEmpty(DOB)){
            Toast.makeText(this, "You should enter a Date of Birth", Toast.LENGTH_LONG).show();
        }
        else if (TextUtils.isEmpty(tag)){
            Toast.makeText(this, "You should enter a Tag Number", Toast.LENGTH_LONG).show();
        }
        else if (tag.length() < 6){
            Toast.makeText(this, "Please enter valid tag number", Toast.LENGTH_LONG).show();

        }
        else{
            String id = databaseAnimal.push().getKey();

            Animal animal = new Animal(id, breed, gender, source, DOB, tag);

            databaseAnimal.child(id).setValue(animal);

            Toast.makeText(this, "Animal added", Toast.LENGTH_LONG).show();
        } }

Это код, который я использовал для получения всех записей.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data_retrieved);

        listView = findViewById(R.id.list_item);

        databaseReference = FirebaseDatabase.getInstance().getReference("animals");
        animalList = new ArrayList<>();


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String tempListValue =(listView.getItemAtPosition(position).toString());
                //String tempListValue = animalList.get(position).toString();
                        //.get(position).toString();

                TextView animalID = (TextView) parent.findViewById(R.id.animalID);
                String animalIDText = (String) animalID.getText();

                TextView animalGender = (TextView) parent.findViewById(R.id.gender);
                String animalGenderText = (String) animalGender.getText();


                TextView animalDOB = (TextView) parent.findViewById(R.id.DOB);
                String animalDOBText = (String) animalDOB.getText();

                TextView source = (TextView) parent.findViewById(R.id.source);
                String sourceText = (String) source.getText();

                TextView animalBreed = (TextView) parent.findViewById(R.id.breed);
                String animalBreedText = (String) animalBreed.getText();

                TextView animalTag = (TextView) parent.findViewById(R.id.tag);
                String animalTagText = (String) animalTag.getText();

                //Multiple Values
                Intent intent = new Intent(DataRetrieved.this, ViewAnimalDetails.class);
                Bundle extras = new Bundle();
                extras.putString("EXTRA_ID",animalIDText);
                extras.putString("EXTRA_DOB",animalDOBText);
                extras.putString("EXTRA_GENDER",animalGenderText);
                extras.putString("EXTRA_SOURCE",sourceText);
                extras.putString("EXTRA_BREED", animalBreedText);
                extras.putString("EXTRA_TAG", animalTagText);
                intent.putExtras(extras);
                startActivity(intent);

                //intent.putExtra("ListViewClickedValue", tempListValue);

                startActivity(intent);


            }
        }); //List view item click ends
    }

    @Override
    protected void onStart(){
        super.onStart();
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot animalSnapshot : dataSnapshot.getChildren()){
                    Animal animal = animalSnapshot.getValue(Animal.class);
                    animalList.add(animal);
                }

                AnimalInfoAdapter animalInfoAdapter = new AnimalInfoAdapter(DataRetrieved.this, animalList);
                listView.setAdapter(animalInfoAdapter);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

Дайте мне знать, если есть какая-либо другая информация, спасибо!

1 Ответ

0 голосов
/ 31 января 2019

Можно ли выполнить запрос на основе даты из базы данных Firebase, если дата сохранена в виде строки?

Простой ответ - да, вы можете запросить на основе строкино результаты будут неверными.Результаты, которые вы получаете при запросе литеральных строк, полностью отличаются от результатов, которые вы получаете при запросе по Date объектам.

Или его можно конвертировать?

Да, может, но результат будет таким же, как указано выше.Самым простым решением для решения этой проблемы является преобразование свойства date из String в Date и запрос данных в соответствии с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...