使用Retrofit2上载图像时出现Java.io.FileNotFoundException

时间:2018-12-13 12:25:50

标签: java android upload retrofit2

当我尝试使用Retrofit2上传图像时,出现此错误

  

:java.io.FileNotFoundException(无此类文件或目录)。

HashMap<String, RequestBody> partMap = new HashMap<>();
file = new File(draggablePresent.getImageUrls().valueAt(0))            
RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file);
partMap.put("image\"; filename=\"" + file.getName() + "\"", fileBody);
compositeDisposable.add(iModelCustomer.uploadFiles(partMap)
              .subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(new Consumer<String>() {
                  @Override
                  public void accept(String wcustomer) throws Exception {
                      Log.e("TAGgggg", wcustomer);

                  }
              }, new Consumer<Throwable>() {
                  @Override
                  public void accept(Throwable throwable) throws Exception {
                      Log.e("TAGpppp", throwable.toString());
                  }
              })
);

我得到了错误:

  

E / TAGpppp:java.io.FileNotFoundException:   文件:/data/user/0/com.yaoyaodate.www.yaoyaodate/cache/cropped_1544702564825.jpg   (没有这样的文件或目录)

我添加了以下代码:

Log.d("filepath",draggablePresent.getImageUrls().valueAt(0));
Glide.with(this).load(draggablePresent.getImageUrls().valueAt(0)).into(imgtest);
HashMap<String, RequestBody> partMap = new HashMap<>();
file = new File(draggablePresent.getImageUrls().valueAt(0));
Log.d("filename",file.getName());

我得到了正确的名字和照片。我可以通过ADB Shell获得文件ropped_1544702564825.jpg。输出:

  

D /文件路径:file:///data/user/0/com.yaoyaodate.www.yaoyaodate/cache/cropped_1544702564825.jpg   D /文件名:cropped_1544702564825.jpg

我在Google上搜索了一整天,无法解决。

有帮助吗?

我还添加了以下代码:

if(file.exists()){
                 Toast.makeText(this,""+file.getName(),Toast.LENGTH_SHORT).show();
            }

不显示吐司。如果文件不存在,为什么getName方法输出正确的名称?我还添加

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

它不起作用。

1 个答案:

答案 0 :(得分:0)

这可以工作,将“ file:///”替换为“ /”。