Изображение не загружено в базу данных - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь загрузить изображение в базу данных firebase. Устройство щелкает изображение с помощью камеры, и оно должно быть загружено в базу данных. Этот код работает без ошибок, но не загружает изображения в базу данных. когда я запускаю это приложение, оно попадает в камеру, где я могу успешно щелкнуть изображение, но после этого оно не показывает индикатор выполнения, а также изображение не загружается.

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;


public class New extends AppCompatActivity {
    private ListView lst;
    private Button btn;
    private StorageReference mstr;
    private final static int GALLERY_INTENT=2;
    private final static int CAMERA_REQUEST_CODE=1;
    private ProgressBar progressBar;
    private ImageView img;

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

        //to upload images to database
        mstr = FirebaseStorage.getInstance().getReference();
        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        img = findViewById(R.id.imageView);

        btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
                startActivityForResult(intent,CAMERA_REQUEST_CODE);
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
            progressBar.setVisibility(View.VISIBLE);
            Uri uri = data.getData();

            StorageReference filepath = mstr.child("Photos").child(uri.getLastPathSegment());

            filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Toast.makeText(New.this,"Upload done",Toast.LENGTH_LONG).show();
                    Task<Uri> downloadUri = taskSnapshot.getStorage().getDownloadUrl();
                    Picasso.with(New.this).load(String.valueOf(downloadUri)).fit().centerCrop().into(img);
                    progressBar.setVisibility(View.INVISIBLE);
                }
            });
        }
    }
}

1 Ответ

0 голосов
/ 12 июля 2020

Используйте это: -

StorageReference filepath = mstr.child("Photos").child(uri.getLastPathSegment());

UploadTask uploadTask = filepath.putFile(uri);


uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                        @Override
                        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                            if (!task.isSuccessful()) {
                                throw task.getException();
                            }
                            return storageReference.getDownloadUrl();
                        }
                    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                        @Override
                        public void onComplete(@NonNull Task<Uri> task) {
                            videoDownloadUrl = String.valueOf(task.getResult());

                            final Map<String,Object> map = new HashMap<>();
                            map.put("URL",videoDownloadUrl);

                            db.child("").child("").push().setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    //do what ever you want.
                        }
                    });

...