База данных Firebase не показывает мне картинку - PullRequest
0 голосов
/ 25 января 2020

Поэтому я сохраняю изображение в своей базе данных в приложении при загрузке изображения. Он загружает его в хранилище и базу данных, но не показывает его при перезапуске приложения. Я выбираю файл с помощью метода filechooser () и загружаю его с помощью fileuploader (). Это прекрасно работает. Picture should show up over the name

enter code herepublic class ProfilBearbeiten extends AppCompatActivity  {




Button bestätigen;
private SharedPreferences speicher;
private SharedPreferences.Editor editor;
TextView fullName,email;
EditText ort,beschreibung, telefonummer, interessen;
FirebaseAuth fAuth;
FirebaseFirestore fStore;
String userId;
ImageView user;
Uri imageurl;
StorageReference mStorageRef;

private StorageTask uploadtask;
private Bitmap compressor;

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

    fAuth = FirebaseAuth.getInstance();
    fStore = FirebaseFirestore.getInstance();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    mStorageRef= FirebaseStorage.getInstance().getReference().child("Images");
    DatabaseReference reference = database.getReference();

    userId = fAuth.getCurrentUser().getUid();
    fullName = findViewById(R.id.tv_name);
    email    = findViewById(R.id.tvEmail);
    bestätigen = findViewById(R.id.btbestätigen);
    ort = findViewById(R.id.tv_address);
    telefonummer = findViewById(R.id.tvTel);
    interessen = findViewById(R.id.tvInt);
    beschreibung = findViewById(R.id.tvBesc);
    user = findViewById(R.id.User);


    user.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    filechooser();
                              //      fileuploader();

                                    Picasso.get().load(imageurl).into(user);


                                }
                            });


            bestätigen.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    // get Information from Edit Text or fileuploader()
                    final String eemail = email.getText().toString().trim();
                    final String efullname = fullName.getText().toString();
                    final String eort = ort.getText().toString();
                    final String einteresssen = interessen.getText().toString();
                    final String ebeschreibung = beschreibung.getText().toString();
                    final String etelefonnummer = telefonummer.getText().toString();
                    final String bild = "";
                    final String image = imageurl != null ? imageurl.toString() : null;


                    userId = fAuth.getCurrentUser().getUid();
                    DocumentReference documentReference = fStore.collection("users").document(userId);

                    //save edited Information in Database

                        Map<String, Object> user = new HashMap<>();
                        user.put("Benutername", efullname);
                        user.put("EMail", eemail);
                        user.put("Ort", eort);
                        user.put("Interessen", einteresssen);
                        user.put("Beschreibung", ebeschreibung);
                        user.put("Telefonnummer", etelefonnummer);
                        user.put("Image", image);
                        documentReference.set(user);


                    Intent intent = new Intent(ProfilBearbeiten.this, Profile.class);
                    startActivity(intent);
                    fileuploader();
                }
            });
    DocumentReference documentReference = fStore.collection("users").document(userId);
    documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {

            fullName.setText(documentSnapshot.getString("Benutername"));
            email.setText(documentSnapshot.getString("EMail"));
            ort.setText(documentSnapshot.getString("Ort"));
            telefonummer.setText(documentSnapshot.getString("Telefonnummer"));
            interessen.setText(documentSnapshot.getString("Interessen"));
            beschreibung.setText(documentSnapshot.getString("Beschreibung"));
            Picasso.get().load(documentSnapshot.getString("Image")).into(user);


        }
    });





}
// uploads and open gallery on device
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode== 1 && resultCode==RESULT_OK && data != null && data.getData() != null){
        imageurl=data.getData();
        user.setImageURI(imageurl);

    }
}

private void filechooser(){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, 1);


}

private String getExtension(Uri uri) {
    ContentResolver cr = getContentResolver();
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    return mimeTypeMap.getExtensionFromMimeType(cr.getType(uri));
}


private void fileuploader () {
        StorageReference Ref = mStorageRef.child(System.currentTimeMillis()+","+getExtension(imageurl));
        uploadtask = Ref.putFile(imageurl)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    // Get a URL to the uploaded content
                    Toast.makeText(ProfilBearbeiten.this, "Image Uploaded", Toast.LENGTH_LONG).show();

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle unsuccessful uploads
                    // ...
                }
            });
}

}

Итак, как вы можете видеть. URL-адрес сохраняется в разделе изображений в базе данных. Когда я загружаю изображение и переключаюсь через другие страницы, изображение будет показано, когда я вернусь к этому слайду. Но всякий раз, когда я закрываю приложение и перезапускаю его », изображение исчезает, хотя URL-адрес остается в базе данных таким же образом. Может быть, моя ошибка, как загрузить его? Picasso.get().load(documentSnapshot.getString("Image")).into(user);

1 Ответ

1 голос
/ 25 января 2020

URL-адрес, который вы храните в базе данных, является локальным URL-адресом изображения на устройстве, которое загружает его в облачное хранилище. Это локальный путь на указанном устройстве c Android, где камера записала файл.

Хотя этот URL-адрес первоначально будет работать на указанном устройстве c, он может не работать позже (так как файл может быть очищен на Android), и он определенно не будет работать на других устройствах (так как изображение там не существует).

Чтобы иметь URL, который будет работать где угодно и на любом раз вы захотите сгенерировать так называемый URL для загрузки и сохранить значение , которое , в базе данных. Обычно вы делаете это сразу после загрузки изображения с помощью вызова getDownloadURL:

StorageReference Ref = mStorageRef.child(System.currentTimeMillis()+","+getExtension(imageurl));
uploadtask = Ref.putFile(imageurl)
    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Toast.makeText(ProfilBearbeiten.this, "Image Uploaded", Toast.LENGTH_LONG).show();
            // Get a URL to the uploaded content
            Ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    // Got the download URL, so write it to the database
                    userId = fAuth.getCurrentUser().getUid();
                    DocumentReference documentReference = fStore.collection("users").document(userId);

                    documentReference.update("Image", uri.toString());
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle any errors
                }
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle unsuccessful uploads
            // ...
        }
    });

Также см. Документацию по загрузке файлов , в которой также показано, как предотвратить выполнение вложенной задачи. обработчики ошибок.

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