2017-01-20 6 views
0
이 포함 된 구성된 루트를 찾지 못했습니다.

Android 용 Glide 이미지로드 라이브러리에 들어가기 만하면됩니다. 여기에서 코드 작업 : https://github.com/bumptech/glide/issues/459Android : IllegalArgumentException :/data/data/

전체 프로젝트 여기 : https://github.com/mhurwicz/glide02

을 나는 안드로이드 Studio의 에뮬레이터에서 응용 프로그램을 실행할 때 나는 다음과 같은 예외를 받고 있어요 :

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.example.glide02/cache/image_manager_disk_cache/5a992029460eed14244e8b970d969d45518b2f7ac10f71eb26bd0aaf7c3bcf06.0 

나머지를

at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711) 
        at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400) 
        at com.example.glide02.ShareTask.onPostExecute(ShareTask.java:37) 
        at com.example.glide02.ShareTask.onPostExecute(ShareTask.java:15) 
        at android.os.AsyncTask.finish(AsyncTask.java:651) 
        at android.os.AsyncTask.-wrap1(AsyncTask.java) 
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

FileProvider.ge에서 오류가 발생합니다. tUriForFile()

@Override protected void onPostExecute(File result) { 
    if (result == null) { return; } 
    Uri uri = FileProvider.getUriForFile(context, context.getPackageName(), result); 
    share(uri); // startActivity probably needs UI thread 
} 

나는이 오류에 관한 몇 가지 다른 질문을 검토 한 결과,하지만 그들은 아마도이 때문에 전체 영역에 대한 지식의 나의 부족에, 내 경우에 어떻게 관련되는지 볼 수 없습니다.

도움이 될 것입니다.

이 위의 방법이 발생하는 클래스의 전체 코드입니다 : filepaths.xml에서

class ShareTask extends AsyncTask<String, Void, File> { 
private final Context context; 

public ShareTask(Context context) { 
    this.context = context; 
} 
@Override protected File doInBackground(String... params) { 
    String url = params[0]; // should be easy to extend to share multiple images at once 
    try { 
     return Glide 
       .with(context) 
       .load(url) 
       .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) 
       .get() // needs to be called on background thread 
       ; 
    } catch (Exception ex) { 
     Log.w("SHARE", "Sharing " + url + " failed", ex); 
     return null; 
    } 
} 
@Override protected void onPostExecute(File result) { 
    if (result == null) { return; } 
    Uri uri = FileProvider.getUriForFile(context, context.getPackageName(), result); 
    share(uri); // startActivity probably needs UI thread 
} 

private void share(Uri result) { 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("image/jpeg"); 
    intent.putExtra(Intent.EXTRA_SUBJECT, "Shared image"); 
    intent.putExtra(Intent.EXTRA_TEXT, "Look what I found!"); 
    intent.putExtra(Intent.EXTRA_STREAM, result); 
    context.startActivity(Intent.createChooser(intent, "Share image")); 
} 

}

답변

2

당신은

<cache-path name="shared_images_from_glide_cache" path="image_manager_disk_cache"/> 

이 매핑 발생합니다 필요

new File("/data/data/com.example.glide02/cache/image_manager_disk_cache/5a992029460eed14244e8b970d969d45518b2f7ac10f71eb26bd0aaf7c3bcf06.0") 

Uri.parse("content://com.example.glide02/shared_images_from_glide_cache/5a992029460eed14244e8b970d969d45518b2f7ac10f71eb26bd0aaf7c3bcf06.0") 

에 (내가 정확히 잘 가지고 확실하지만 요점을 파악해야하지 않습니다.)

+0

그것을 않았다! 너무 많은 @TWiStErRob을 가져 주셔서 감사합니다! github에 대한 프로젝트는 현재 참조 할 수있는 미래의 검색 사용자를 위해 기능적이어야합니다. – user1147171