片段中的Androind ImageView

时间:2018-07-31 06:30:14

标签: android imageview fragment android-volley

我正在尝试在片段上放置图像,但是图像没有显示出来。我确定它只是在昨天才起作用,但现在却没有。任何帮助表示赞赏。

此代码在我的片段中:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    mUser = (User) getArguments().getSerializable(ARGS_USER);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    View v = inflater.inflate(R.layout.fragment_picture_picker, container, false);

    mImageView = v.findViewById(R.id.imageView);
    mSelectImageButton = v.findViewById(R.id.select_image);

    mSelectImageButton.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){


            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent, IMG_REQUEST);
        }
    });

    return v;

}

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


    if(requestCode == IMG_REQUEST && resultCode == Activity.RESULT_OK && data != null){
        Uri path = data.getData();

            try {
                bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), path);
                mImageView.setImageBitmap(bitmap);
                mImageView.setVisibility(View.VISIBLE);
                mUser.setProfilePicture(bitmap);

            }catch(IOException e){
                e.printStackTrace();
            }
    }
}

1 个答案:

答案 0 :(得分:0)

实际上,您没有使用Volley。请更改您的问题的标题。您正在访问图库,并在imageView中显示图像。使用以下代码从相机和图库访问图像。

if (action.equals("CAMERA")) {
        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            // Check Permissions Now
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, ACTION_REQUEST_CAMERA);
        } else {
            openCamera();
        }

    } else if (action.equals("GALLERY")) {
        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            // Check Permissions Now
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, ACTION_REQUEST_GALLERY);
        } else {
            openGallery();
        }
    }


private void openCamera(){
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    getActivity().startActivityForResult(cameraIntent, ACTION_REQUEST_CAMERA);
}

private void openGallery(){
    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    Intent chooser = Intent.createChooser(galleryIntent, "Choose a Picture");
    getActivity().startActivityForResult(chooser, ACTION_REQUEST_GALLERY);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    System.out.println("OnActivityResult");
    System.out.println("resultCode: "+resultCode+"\n"+"requestCode: "+requestCode);
    ImageOperations operations = new ImageOperations();
    if (resultCode == RESULT_OK) {
        if (requestCode == ACTION_REQUEST_GALLERY) {
            System.out.println("select file from gallery ");
            Uri selectedImageUri = data.getData();
            renderProfileImage(selectedImageUri,operations);
        } else if (requestCode == ACTION_REQUEST_CAMERA) {

            System.out.println("select file from camera ");
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            String name = "profile_pic.png";
            operations.saveImageToInternalStorage(photo,getActivity(),name);
            profile_image.setImageBitmap(photo);
        }
    }
}

private void renderProfileImage(Uri selectedImageUri,ImageOperations operations) {
    Bitmap bitmap = null;
    try {
        bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageUri);
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bytes);
        String name = "profile_pic.png";
        operations.saveImageToInternalStorage(bitmap,getActivity(),name);
        profile_image.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private class ImageOperations {
    public boolean saveImageToInternalStorage(Bitmap image, Context context, String name) {

        try {
            // Use the compress method on the Bitmap object to write image to
            // the OutputStream
            FileOutputStream fos = context.openFileOutput("profile_pic.png", Context.MODE_PRIVATE);
            // Writing the bitmap to the output stream
            image.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
            return true;
        } catch (Exception e) {
            Log.e("saveToInternalStorage()", e.getMessage());
            return false;
        }
    }

    public Bitmap getThumbnail(Context context,String filename) {

        String fullPath = Environment.getDataDirectory().getAbsolutePath();
        Bitmap thumbnail = null;

        // Look for the file on the external storage
        try {
            if (isSdReadable() == true) {
                thumbnail = BitmapFactory.decodeFile(fullPath + "/" + filename);
            }
        } catch (Exception e) {
            Log.e("Image",e.getMessage());
        }

        // If no file on external storage, look in internal storage
        if (thumbnail == null) {
            try {
                File filePath = context.getFileStreamPath(filename);
                FileInputStream fi = new FileInputStream(filePath);
                thumbnail = BitmapFactory.decodeStream(fi);
            } catch (Exception ex) {
                Log.e("getThumbnail()", ex.getMessage());
            }
        }

        return thumbnail;
    }


    public boolean isSdReadable() {

        boolean mExternalStorageAvailable = false;
        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            // We can read and write the media
            mExternalStorageAvailable = true;
            Log.i("isSdReadable", "External storage card is readable.");
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            // We can only read the media
            Log.i("isSdReadable", "External storage card is readable.");
            mExternalStorageAvailable = true;
        } else {
            // Something else is wrong. It may be one of many other
            // states, but all we need to know is we can neither read nor write
            mExternalStorageAvailable = false;
        }

        return mExternalStorageAvailable;
    }
}

操作就像您要执行的操作。 ACTION_REQUEST_GALLERY和ACTION_REQUEST_CAMERA使用一些整数常量,例如100和101。profileImage是您的ImageView。