Изображения не выбираются в фотогалерее - PullRequest
0 голосов
/ 13 января 2019

Я недавно сделал это, чтобы пользователи могли выбрать изображение из своей фотогалереи или загрузок и загрузить его в Firebase Storage и использовать изображение в качестве картинки своего профиля.

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

public class AccountSettings extends AppCompatActivity {

StorageReference storageReference;
private static final int IMAGE_REQUEST = 1;
private StorageTask uploadTask;
private Uri profileImage;

private void openImage() {
    Intent intent = new Intent();
    intent.setType("image/");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent, IMAGE_REQUEST);
}

private String getFileExtension(Uri uri) {
    ContentResolver contentResolver = AccountSettings.this.getContentResolver();
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    return mimeTypeMap.getMimeTypeFromExtension(contentResolver.getType(uri));
}

private void uploadImage() {
    final ProgressDialog pd = new ProgressDialog(AccountSettings.this);
    pd.setMessage("Uploading");
    pd.show();

    if (profileImage != null) {
        final StorageReference fileReference = storageReference.child(System.currentTimeMillis() + "." + getFileExtension(profileImage));

        uploadTask = fileReference.putFile(profileImage);
        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 fileReference.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    String mUri = downloadUri.toString();

                    HashMap<String, Object> map = new HashMap<>();
                    map.put("imageURL", mUri);
                    HomePage.myRef.updateChildren(map);

                    pd.dismiss();
                } else {
                    Toast.makeText(AccountSettings.this, "FAILED!!", Toast.LENGTH_SHORT).show();
                    pd.dismiss();
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(AccountSettings.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                pd.dismiss();
            }
        });
    } else {
        Toast.makeText(AccountSettings.this, "No image selected", Toast.LENGTH_SHORT).show();
    }
}

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

    if (requestCode == IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null && data.getData() != null) {
        profileImage = data.getData();

        if (uploadTask != null && uploadTask.isInProgress()) {
            Toast.makeText(AccountSettings.this, "Upload in progress", Toast.LENGTH_SHORT).show();
        } else {
            uploadImage();
        }
    }
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}
}

И это те разрешения, которые у меня есть в моем Манифесте, чтобы позволить пользователям выбирать изображения - я думаю, что проблема здесь, но я не уверен

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Я не знаю, почему изображения не выбираются

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