Возврат sizeof () [duplicate]

Вы можете использовать следующий код. Здесь я загружаю изображение в хранилище firebase, а затем я сохраняю URL-адрес загрузки изображения в базу данных firebase.

//getting the storage reference
            StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "." + getFileExtension(filePath));

            //adding the file to reference 
            sRef.putFile(filePath)
                    .addOnSuccessListener(new OnSuccessListener() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            //dismissing the progress dialog
                            progressDialog.dismiss();

                            //displaying success toast 
                            Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();

                            //creating the upload object to store uploaded image details 
                            Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());

                            //adding an upload to firebase database 
                            String uploadId = mDatabase.push().getKey();
                            mDatabase.child(uploadId).setValue(upload);
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            progressDialog.dismiss();
                            Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            //displaying the upload progress 
                            double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                            progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
                        }
                    });

Теперь, чтобы получить все изображения, хранящиеся в базе данных firebase, вы можете использовать

//adding an event listener to fetch values
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                //dismissing the progress dialog 
                progressDialog.dismiss();

                //iterating through all the values in database
                for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                    Upload upload = postSnapshot.getValue(Upload.class);
                    uploads.add(upload);
                }
                //creating adapter
                adapter = new MyAdapter(getApplicationContext(), uploads);

                //adding adapter to recyclerview
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                progressDialog.dismiss();
            }
        });

. Более подробную информацию вы можете увидеть в моем сообщении Пример хранения Firebase .

41
задан CsTamas 8 September 2009 в 06:47
поделиться

2 ответа

  1. sizeof("f") должен возвращать 2, один для «f» и один для завершения «\ 0».
  2. sizeof(foo) возвращает 4 на 32-битной машине и 8 на 64-битная машина, потому что foo является указателем
  3. sizeof(bar) возвращает 2, потому что bar представляет собой массив из двух символов, «b» и завершающий «\ 0».

Строковый литерал имеет тип «массив размера N символа», где N включает в себя конечный нуль.

Помните, что массивы не распадаются на указатели при передаче в sizeof.

94
ответ дан Jonathan Leffler 6 September 2018 в 05:58
поделиться

sizeof возвращает размер в байтах своего операнда. Это должно ответить на вопрос номер 1.;) Кроме того, строковый литерал имеет тип «array to n const char» при передаче в sizeof.

Ваши тестовые примеры поочередно:

  • "f" является строковым литералом, состоящим из двух символов, символа f и завершающего NUL.
  • foo является указателем (редактирование: независимо от квалификаторов) и указатели кажутся 4 байтами в вашей системе ..
  • Для bar случай тот же, что и "f".

Надеюсь, что это помогает.

13
ответ дан Michael Foukarakis 6 September 2018 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: