当前位置: 首页 > 知识库问答 >
问题:

android中的Uri vs File vs StringPath

邹高峻
2023-03-14
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { //Browse Gallery is requested
    //Get the path for selected image in Gallery
    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    //Access Gallery according to the path
    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();

    loadImage(picturePath);         //load picture according the path
    image_View.setImageBitmap(pic); //Show the selected picture
}
private void loadImage(String picturePath) {
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    BitmapFactory.decodeFile(picturePath,options);
    int height_ = options.outHeight;
    int width_ = options.outWidth;
    float ratio = width_/height_;
    int width = 480;
    int height = 480;
    if(width_>height_){
        height = Math.round(width / ratio);
    }else{
        width = Math.round(width*ratio);
    }

    options.inSampleSize = calculateInSampleSize(options, width, height);
    options.inJustDecodeBounds = false;
    pic=BitmapFactory.decodeFile(picturePath,options);
}
File cacheDir = getBaseContext().getCacheDir();
//Form a directory with a file named "pic"
File f = new File(cacheDir, "pic");

try {
    //Prepare output stream that write byte to the directory
    FileOutputStream out = new FileOutputStream(f);
    //Save the picture to the directory
    pic.compress(Bitmap.CompressFormat.JPEG, 100, out);
    out.flush();
    out.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

那么,有什么区别呢?是不是只是用法不同,却代表相同的目录?

共有1个答案

左博学
2023-03-14

内容URI类似于:

content://media/external/images/media/53

ContentResolver在这里的作用是根据这个URI获得对映像的访问权,您不需要知道文件名或文件的其他属性,只需要这个URI就可以访问映像。

String Path是存储的映像的物理地址,看起来如下所示:

file:///mnt/sdcard/myimage.jpg

在您提供的示例中,以下是进度:

1-您要求ContentResolver根据提供的URI给出真实的文件路径

2-根据提供的路径将位图文件加载到pic对象

 类似资料:
  • 我的年级代码是: 请帮我解决这个问题。

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 问题内容: 我正在尝试创建一个可以验证人脸的Android应用程序,但是当我尝试在模拟器上运行应用程序(使用Eclipse)时,在logcat中得到以下结果: FaceVerificationApplication.java的代码如下: 我该如何解决此异常?任何建议都会有很大帮助。 问题答案: 嗨,我的问题解决了。我必须将jna-4.2.2.jar添加到我的项目中。我在jna.jar中遇到有关本机

  • 问题内容: 我需要在内部存储中打开包含图像的文件夹。 我使用以下代码。 java 路径 表现 xml / file_paths 错误 致命异常:主要过程:android.apps.bnb.company.myphotos,PID:22482 android.os.FileUriExposedException:file:/// storage / emulated / 0 / Pictures /

  • 问题内容: 我有很多文件的Java项目,正在使用LOG4J。现在,我正在尝试将其移植到Android平台。是否可以通过LOG4J函数调用按原样重用代码? 目前的理解: 属性配置不起作用(依赖于bean) 我尝试使用LOG4J for Android和SL4J Lib。没有成功 加工。但是没用 我想念什么吗?指向任何可行的例子? 问题答案: 通过使用android-logging- log4j.ja

  • 我有一个问题,找出我的源代码中的错误。 有什么办法可以解决它吗? 我的代码中抛出了“ArrayIndexOutOfBoundsException”,但我无法找到它的位置。 android studio中的logcat:

  • 问题内容: 有什么办法可以在android中执行吗? 我一直在网上看到所有内容,但是在android中找不到JSON类。 有什么帮助吗? 问题答案: 是Javascript函数,在Java中不可用。如果您使用的是Android SDK中内置的程序包,则等效的方法是只调用您的实例,或更人性化。 http://developer.android.com/reference/org/json/JSONO

  • 问题内容: 我正在尝试使用新的Android Studio开发和应用,但是我的OnClickListener始终收到重大错误。主要是告诉我它无法解析符号“ setOnClickListener”,也无法解析“ View v” 那是班上的代码 这些是我收到的错误,绝对没有道理。28行开始于 编辑:现在当我按下按钮时,我收到一个强制关闭 这是应该打开的类,仅有的类是唯一的变化是要打开的布局 问题答案: