2017-08-13 23 views
1

グライドからイメージビューにロードされたイメージをこのguideの次に共有しようとすると、不正な引数例外が発生します。私はそれ不正な引数の例外:設定されたルートを見つけることができません

MainAcitvity.xml

public class MainActivity extends AppCompatActivity { 

    private EditText editText; 
    private ShareActionProvider myShareActionProvider; 
    //private Bitmap bitmap; 
    private Uri uri; 
    private Intent shareIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imageView = (ImageView) findViewById(R.id.imageView); 

     String hi = "http://37n98a43dqtb4bua9n28nidp.wpengine.netdna-cdn.com/wp-content/uploads/2016/09/MyFriendPikachu.jpg"; 

     Glide 
       .with(this) 
       .load(hi) 
       .listener(new RequestListener<String, GlideDrawable>() { 
        @Override 
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
         return false; 
        } 

        @Override 
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
         prepareShareIntent(((GlideBitmapDrawable) resource).getBitmap()); 
         attachShareIntentAction(); 
         return false; 
        } 
       }) 
       .placeholder(R.drawable.ic_action_name) 
       .error(R.drawable.ic_img_error) 
       .centerCrop() 
       .into(imageView); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.img_menu, menu); 

     MenuItem item = menu.findItem(R.id.action_share); 

     myShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 
     attachShareIntentAction(); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     return super.onOptionsItemSelected(item); 


    } 

    public void prepareShareIntent(Bitmap drawableImage) { 

     Uri bmpUri = getBitmapFromDrawable(drawableImage); 

     shareIntent = new Intent(); 

     shareIntent.setAction(Intent.ACTION_SEND); 

     shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 

     shareIntent.setType("image/*"); 

    } 


    public void attachShareIntentAction() { 

     if (myShareActionProvider != null && shareIntent != null) 

      myShareActionProvider.setShareIntent(shareIntent); 

    } 


    public Uri getBitmapFromDrawable(Bitmap bmp) { 


     Uri bmpUri = null; 

     try { 

      //also tried getExternalDir(Environment.DIRECTORY_PICTURES) 
      File file = new File(Environment.getExternalStorageDirectory(), "images" + System.currentTimeMillis() + ".png"); 

      FileOutputStream out = new FileOutputStream(file); 

      bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 

      out.close(); 


      bmpUri = FileProvider.getUriForFile(MainActivity.this, "com.example.imnobody.sampleprojectnetwork.fileprovider", file); // use this version for API >= 24 

      // **Note:** For API < 24, you may use bmpUri = Uri.fromFile(file); 

     } catch (IOException e) { 

      e.printStackTrace(); 

     } 

     return bmpUri; 

    } 

} 

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.imnobody.sampleprojectnetwork"> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 





    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <provider 

      android:name="android.support.v4.content.FileProvider" 

      android:authorities="com.example.imnobody.sampleprojectnetwork.fileprovider" 

      android:exported="false" 

      android:grantUriPermissions="true"> 

      <meta-data 


       android:name="android.support.FILE_PROVIDER_PATHS" 

       android:resource="@xml/fileprovider" /> 

     </provider> 
    </application> 

</manifest> 

に、fileprovider.xml

<?xml version="1.0" encoding="utf-8"?> 

<paths> 

    <external-file-path 

     name="images" 

     path="Pictures" /> 

</paths> 
をコードし、以下のスタックトレースを掲載しました

STACKTRACE

java.lang.IllegalArgumentExceptionがは:android.support.v4.content.FileProvider $ SimplePathStrategy.getUriForFileで/storage/sdcard0/images1502651207040.png が含まれて構成されたルート(FileProvider.javaを見つけることができませんでした: 711) android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400) at com.example.imnobody.sampleprojectnetwork.MainActivity.getBitmapFromDrawable(MainActivity.java:134) at com.example.imnobody。サンプルプロジェクトネットワーク。主な活動.preareShareIntent(MainActivity.java:95) com.example.imnobody.sampleprojectnetwork.MainActivity $ 1.onResourceReady(MainActivity.java:59) at com.example.imnobody.sampleprojectnetwork.MainActivity $ 1.onResourceReady(MainActivity.java:51) at com.bumptech.glide.request .GenericRequest.onResourceReady(GenericRequest.java:522) at com.bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:507) at com.bumptech.glide.load.engine.EngineJob.handleResultOnMainThread(EngineJob.java) :158) at com.bumptech.glide.load.engine.EngineJob.access $ 100(EngineJob.java:22) at com.bumptech.glide.load.engine.EngineJob $ MainThreadCallback.handleMessage(EngineJob.java:202) でandroid.os.Handler.dispatchMessage(Handler.java:106) とandroid.os.Looper.loop(Looper.java:193) とandroid.app.ActivityThread.main(ActivityThread.java:5292) でjava.lang.reflect.Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :dalvik.system.NativeSで824)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640で )

+0

原因は、アプリケーションが要求されたファイルを見つけられませんでした: '/storage/sdcard0/images1502651207040.png at ...が含まれている構成済みのルートを見つけることができませんでした ' –

答えて

2

まず、あなたのメタデータでは、CHA nge external-file-pathexternal-files-pathには、紛失番号sが追加されます。

第2に、/storage/sdcard0/images1502651207040.pngは、修復されたメタデータと一致しません。メタデータにはgetExternalFilesDir()、具体的にはPicturesというディレクトリが使用されています。あなたのパスはそれに似ていません。documentationによると

1

<external-path name="name" path="path" />

は、外部記憶領域のルート 内のファイルを表します。このサブディレクトリのルートパスは、 byEnvironment.getExternalStorageDirectory()と同じ値の です。

あなたはあなたの外付けストレージルート(/ストレージ/ sdcard0)から参照を呼んでいるが、あなたは/storage/sdcard0/Android/data/your.package.name/であなたのパッケージルートを参照する必要が代わりに画像。

関連する問題