2016-08-22 5 views
0

インターネット上に多くの例があることは知っていますが、それらの誰も本当に欲しいものはありません。私はインテントを持つ複数の画像を選択し、このコードが1つのものと同じように "URL"を取得したいと考えています。アンドロイドギャラリーから複数の画像を選択してパスを取得する

コード(私はこのコードは複数を選択することができないことを知っているが、私は私がやろうとしているものの例としてこれを使用する):インターネット上の検索

public static final int RESULT_LOAD_IMG = 0; 
public void LoadImg() { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 
    } 

ArrayList<Part> files = new ArrayList<>(); 

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

     if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      files.add(new FilePart("uploadedfile[" + String.valueOf(files.size()) + "]", new File(picturePath))); 
      cursor.close(); 
     } 
    } 

を私はLaithからこの例を見つけましたこの投稿のMihyar:Select multiple images from android gallery と私はここで同じことをしたいが、ファイルのパスはここでは異なっており、私がしようとしていることに対しては機能しません。

コード:

int PICK_IMAGE_MULTIPLE = 1 
String imageEncoded;  
List<String> imagesEncodedList; 
Intent intent = new Intent(); 
    intent.setType("image/*"); 
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), PICK_IMAGE_MULTIPLE); 
@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     try { 
      // When an Image is picked 
      if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK 
        && null != data) { 
       // Get the Image from data 

       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
       imagesEncodedList = new ArrayList<String>(); 
       if(data.getData()!=null){ 

        Uri mImageUri=data.getData(); 

        // Get the cursor 
        Cursor cursor = getContentResolver().query(mImageUri, 
          filePathColumn, null, null, null); 
        // Move to first row 
        cursor.moveToFirst(); 

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

       }else { 
        if (data.getClipData() != null) { 
         ClipData mClipData = data.getClipData(); 
         ArrayList<Uri> mArrayUri = new ArrayList<Uri>(); 
         for (int i = 0; i < mClipData.getItemCount(); i++) { 

          ClipData.Item item = mClipData.getItemAt(i); 
          Uri uri = item.getUri(); 
          mArrayUri.add(uri); 
          // Get the cursor 
          Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null); 
          // Move to first row 
          cursor.moveToFirst(); 

          int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
          imageEncoded = cursor.getString(columnIndex); 
          imagesEncodedList.add(imageEncoded); 
          cursor.close(); 

         } 
         Log.v("LOG_TAG", "Selected Images" + mArrayUri.size()); 
        } 
       } 
      } else { 
       Toast.makeText(this, "You haven't picked Image", 
         Toast.LENGTH_LONG).show(); 
      } 
     } catch (Exception e) { 
      Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
        .show(); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

おかげ

+0

なぜ機能しませんか?あなたは何をしようとしていますか?かなり曖昧です。また、ファイルパスが異なる場合の問題は何ですか?不明。 – greenapps

+0

私はファイルへのパスを取得する必要がありますが、私がしようとしているパスの代わりに、私は(com.appname.xのような)アプリケーション名とidを持つファイル取得する。私は "/content/files/image.png"のようなものを手に入れようとしていますが、 "com.company.appname /&file6647"というようなものがあります。 – PaulD

+1

ファイルへのパスは何ですか?ウリを使用してください!あなたはそれですべてをすることができます。何をしたいですか? – greenapps

答えて

0

ない "ファイルパス" はありません。 ACTION_GET_CONTENTfileUriを返す必要はなく、新しいデバイスではほとんどの場合、contentUriが返されます。

Uriで示される内容にInputStreamを得るには、ContentResolveropenInputStream()を使用してください。 Uriで識別されるコンテンツに関するメタデータを取得するには、DocumentFilefromSingleUri()を使用してください。

私もピカソや他の画像ローディングライブラリ(でもイオン)は問題なくcontentUri値で動作ImageViewの

でそれをロードすることはできません。

私は最善の解決策は、より良いHTTPクライアントライブラリ、より高い柔軟性を提供していますいずれかを使用することであろうパス

を必要とするイオンlibに、とそれらのファイルをアップロードしようとしています。 OkHttp(Okioと)はUriからのアップロードを処理できるはずです。

またはContentResolveropenInputStream()を使用して、コンテンツにInputStreamを取得してください。一部のローカルファイルでストリームを取得するにはFileOutputStreamを使用してください(例:getCacheDir())。 Java I/Oを使用して、InputStreamからFileOutputStreamにバイトをコピーします。次に、Ionでローカルファイルを使用します。

+0

ファイルをIon plsでロードする例を教えてください。私はこれについてよく知らないので、実際にイオンを使う必要があります。 – PaulD

関連する問題