第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Android 上從照片 URI 創(chuàng)建文件

在 Android 上從照片 URI 創(chuàng)建文件

紫衣仙女 2022-12-15 17:03:33
我有一個(gè) Android 應(yīng)用程序,需要讓用戶從圖庫中選擇一些圖片并將這些圖片發(fā)送到后端(連同一些其他數(shù)據(jù))。為了讓用戶選擇我的片段中的圖片:private void pickImages() {    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);    intent.setType("image/*");    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);    startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);}我在這里得到用戶選擇的照片的結(jié)果:@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == PICK_PHOTO_FOR_AVATAR && resultCode == Activity.RESULT_OK) {        if (data == null) {            //Display an error            Toast.makeText(getActivity(), "There was an error getting the pictures", Toast.LENGTH_LONG).show();           return;        }        ClipData clipData = data.getClipData();        String fileName = null, extension = null;        //if ClipData is null, then we have a regular file        if (clipData == null) {            //get the selected file uri            fileName = FileUtils.getPath(getActivity(), data.getData());            //obtain the extension of the file            int index = fileName.lastIndexOf('.');            if (index > 0) {                extension = fileName.substring(index + 1);                if (extension.equals("jpg") || extension.equals("png") || extension.equals("bmp") || extension.equals("jpeg"))                    isAttachedFile = true;            }        }        ArrayList<Uri> photosUris = new ArrayList<>();        //for each image in the list of images, add it to the filesUris        if (clipData != null) for (int i = 0; i < clipData.getItemCount(); i++) {            ClipData.Item item = clipData.getItemAt(i);            Uri uri = item.getUri();            switch (i) {                case 0:                    picture1Uri = uri;                    break;                case 1:                    picture2Uri = uri;                    break;            }            
查看完整描述

1 回答

?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

為了讓用戶選擇我的片段中的圖片:

此代碼正在使用ACTION_GET_CONTENT. 特別是在 Android 7.0+ 上,通常 (and ACTION_OPEN_DOCUMENT) 將返回Uri帶有content方案的值。您的代碼假定您正在Uri使用一個(gè)方案獲取值file,其中路徑實(shí)際上具有意義。此外,您的代碼假定用戶正在選擇您可以訪問的文件系統(tǒng)上的文件,并且沒有任何強(qiáng)制用戶這樣做的東西。ACTION_GET_CONTENT可以由內(nèi)容為以下內(nèi)容的應(yīng)用程序支持:

  • 外部存儲(chǔ)上的本地文件

  • 另一個(gè)應(yīng)用程序內(nèi)部存儲(chǔ)上的本地文件

  • 可移動(dòng)存儲(chǔ)上的本地文件

  • 加密的本地文件,需要即時(shí)解密

  • BLOB保存在數(shù)據(jù)庫列中的字節(jié)流

  • 互聯(lián)網(wǎng)上的一段內(nèi)容,需要先由其他應(yīng)用下載

  • 即時(shí)生成的內(nèi)容

  • ...等等

而不是使用RequestBody.create(),使用InputStreamRequestBody來自這個(gè) OkHttp 問題的評(píng)論。您提供與以前相同的媒體類型,但您提供的不是 a File(您錯(cuò)誤地創(chuàng)建),而是ContentResolver(來自getContentResolver()a 上的Context)和Uri.

這篇博文演示了如何使用InputStreamRequestBody(特別是原始的 Kotlin 端口)以這種方式上傳內(nèi)容。這篇博文提供了對(duì)同一問題和類似解決方案的另一種看法。


查看完整回答
反對(duì) 回復(fù) 2022-12-15
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)