Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从库中获取图像并在ImageView中设置(扩展片段)?_Java_Android_Imageview - Fatal编程技术网

Java 如何从库中获取图像并在ImageView中设置(扩展片段)?

Java 如何从库中获取图像并在ImageView中设置(扩展片段)?,java,android,imageview,Java,Android,Imageview,我试图从gallery获取图像并在ImageView中显示该图像,但出现以下错误: E/ActivityManager: Sending non-protected broadcast com.motorola.motocare.INTENT_TRIGGER from system 4425:com.motorola.process.system/1000 pkg com.motorola.motgeofencesvc

我试图从gallery获取图像并在ImageView中显示该图像,但出现以下错误:

    E/ActivityManager: Sending non-protected broadcast com.motorola.motocare.INTENT_TRIGGER from system 4425:com.motorola.process.system/1000 pkg com.motorola.motgeofencesvc
                                                  java.lang.Throwable
                                                      at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:18179)
                                                      at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:18779)
                                                      at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:512)
                                                      at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2905)
                                                      at android.os.Binder.execTransact(Binder.java:565)
04-27 17:21:28.696 559-559/? W/SurfaceFlinger: couldn't log to binary event log: overflow.
这里的完整代码如下所示:

main.java

    package omcommunication.image;

public class AddWOD extends Fragment implements View.OnClickListener {
Activity activity;

public AddWOD() {
}

; private static int IMG_RESULT = 1;
String ImageDecode;
ImageView imageViewLoad;
Button LoadImage;
Intent intent;
String[] FILE;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.activity_add_wod, container, false);
     img=(ImageView) view.findViewById(R.id.imgview);
    buy_image1 = (ImageView) view.findViewById(R.id.rent_iv_addpro_image1);
    buy_image1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            intent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(intent, IMG_RESULT);



        }
    });
     return view;
}

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

        if (requestCode == IMG_RESULT && resultCode == RESULT_OK
                && null != data) {


            Uri URI = data.getData();
            String[] FILE = { MediaStore.Images.Media.DATA };


            Cursor cursor = getActivity().getContentResolver().query(URI,
                    FILE, null, null, null);

            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(FILE[0]);
            ImageDecode = cursor.getString(columnIndex);
            cursor.close();

            img.setImageBitmap(BitmapFactory
                    .decodeFile(ImageDecode));

        }
    } catch (Exception e) {
        Toast.makeText(getActivity(), "Please try again", Toast.LENGTH_LONG)
                .show();
    }

}

我提出了许多问题,但没有得到所需的东西,是的,我在清单中授予了外部存储权限。

如果您运行的设备大于
棒棒糖
,那么您肯定缺少
Android运行时权限


您可以参考答案。

最好将
Uri
交给,例如毕加索,它不仅可以为您处理所有图像加载,还可以在后台线程上完成

如果你坚持自己做这件事,从以下几点开始:

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

        if (requestCode == IMG_RESULT && resultCode == RESULT_OK
                && null != data) {
            imageViewLoad.setImageBitmap(BitmapFactory
                    .decodeStream(getContentResolver().openInputStream(data.getData()));

        }
    } catch (Exception e) {
        Toast.makeText(this, "Please try again", Toast.LENGTH_LONG)
                .show();
    }

}
然后,在工作完成后,切换到使用
AsyncTask
或在后台线程上执行
decodeStream()
部分,并在主应用程序线程上执行
setImageBitmap()
部分


特别是,这不需要您处理运行时权限。正确使用
Uri
可以利用用户选择图片时授予您的临时权限。

允许运行时权限的代码

如果(Build.VERSION.SDK_INT>=23)

{ checkMultiplePermissions()

} 私有void checkMultiplePermissions(){

if(Build.VERSION.SDK\u INT>=23){
List permissions need=new ArrayList();
列表权限列表=新的ArrayList();
if(!addPermission(permissionsList,Manifest.permission.READ\u EXTERNAL\u STORAGE)){
需要许可。添加(“访问位置”);
}
如果(permissionsList.size()>0){
requestPermissions(permissionsList.toArray(新字符串[permissionsList.size()),
请求\代码\请求\多个权限);
返回;
}
}
}
私有布尔添加权限(列表权限列表、字符串权限){
如果(Build.VERSION.SDK_INT>=23)
if(checkSelfPermission(permission)!=PackageManager.permission\u已授予){
权限列表。添加(权限);
//检查基本原理选项
如果(!shouldshowRequestPermissionRegulation(许可))
返回false;
}
返回true;
}
@凌驾
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
开关(请求代码){
案例请求\代码\请求\多个权限:{
Map perms=new HashMap();
perms.put(Manifest.permission.READ_EXTERNAL_STORAGE,PackageManager.permission_grated);
for(int i=0;i=23){
}
}
}
打破
违约:
super.onRequestPermissionsResult(请求代码、权限、授权结果);
}
}
这对我来说很有用:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data)
        {
            Uri selectedImg = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getActivity().getContentResolver().query(selectedImg,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            buy_image1 .setImageBitmap(BitmapFactory.decodeFile(picturePath));
            cursor.close();
        }
    }

错误消息中的关键字是
权限被拒绝
。您是否请求从外部存储读取的权限?您使用的是哪个targetSDK和Android版本?您是否在Android版本多于棒棒糖的设备上测试代码?如果是,则您必须添加运行时权限。请签入应用设置,检查您的应用是否具有存储权限?仅在清单文件中提及是不够的。好的,这是正确的,我在运行相同的代码时使用了片段,然后它就不工作了。.在片段使用的情况下-getActivity().startActivityForResult(intent,IMG_RESULT);好的,这是正确的,当我运行相同的代码时,我正在使用片段,然后它就不工作了。。
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data)
        {
            Uri selectedImg = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getActivity().getContentResolver().query(selectedImg,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            buy_image1 .setImageBitmap(BitmapFactory.decodeFile(picturePath));
            cursor.close();
        }
    }