Как узнать дату и время при загрузке изображения в firebase? - PullRequest
0 голосов
/ 05 февраля 2019

Я загружаю / отправляю изображение в базу данных Firebase и базу данных в реальном времени.Как узнать текущую дату и время при загрузке изображения?

private void uploadImage() {
    if (imgUrl != null) {
        final StorageReference fileReference = mStorageRef.child(System.currentTimeMillis() + "." + getFileExtension(imgUrl));

        mUploadTask = fileReference.putFile(imgUrl)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Calendar calendar = Calendar.getInstance();

                        final String currentdate = DateFormat.getDateInstance().format(calendar.getTime());
                        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
                        String time = format.format(calendar.getTime());
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                uploadProgress.setProgress(0);
                            }
                        }, 500);
                        fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                Notify upload = new Notify(imgDescription.getText().toString().trim(), uri.toString());
                                String uploadID = mDatabaseRef.push().getKey();
                                mDatabaseRef.child(uploadID).setValue(upload);
                                Toast.makeText(StudentNotify.this, "Upload successfully", Toast.LENGTH_LONG).show();
                                imgDescription.setText("");
                            }
                        });


                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(StudentNotify.this, e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                        uploadProgress.setProgress((int) progress);
                    }
                });
    } else {
        Toast.makeText(StudentNotify.this, "No file selected", Toast.LENGTH_SHORT).show();
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Когда я получу ваш вопрос, вы также хотите сохранить текущую метку времени при сохранении URL-адреса и описания изображения в базе данных реального времени Firebase.

Вы можете использовать ServerValue.TIMESTAMP, предоставляемый сервером базы данных Firebase.и сохраните его в новом поле отметки времени в вашей базе данных вместе с полями url и description для каждого изображения.Серверы Firebase записывают текущую метку времени в миллисекундах UTC вместо этого значения при выполнении записи.Это значение представляет собой 13-значное числовое значение.https://firebase.google.com/docs/reference/android/com/google/firebase/database/ServerValue

Включите приведенный ниже код для записи этого значения для каждого изображения

    fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
          @Override
          public void onSuccess(Uri uri) {
              Notify upload = new Notify(imgDescription.getText().toString().trim(), 
                                         uri.toString());
              String uploadID = mDatabaseRef.push().getKey();
              mDatabaseRef.child(uploadID).setValue(upload);

              mDatabaseRef.child(uploadID).child("timestamp").setValue(ServerValue.TIMESTAMP);

              Toast.makeText(StudentNotify.this, "Upload successfully", Toast.LENGTH_LONG).show();
              imgDescription.setText("");
          }
    });

Это создаст новое поле с именем ключа «timestamp» для каждого изображения с 13-значным номером.представляющий метку времени UTC в миллисекундах, как показано ниже

{
    //...

    imagePushKeyId1: {
        url: "image url here",
        desc: "image description here"
        timestamp: 1549347429000
    }

    //....
}

При чтении из базы данных вы можете получить это значение в виде длинного целого числа в переменной, скажем, «метка времени», и преобразовать его в дату и время, как показано ниже

Date date = new Date(timestamp);
String dateTimePattern = "MMM dd, yyyy EEE h:mm a";
String dateText = new SimpleDateFormat(dateTimePattern).format(date);

Он предоставляет dateText в формате ниже 28 января 2019 г. Пн. 15:52

Использование позволяет получить его в любом формате, изменив строку dateTimePattern, см. Ссылку ниже дляподробности.https://developer.android.com/reference/java/text/SimpleDateFormat#date-and-time-patterns

...