当前位置: 首页 > 知识库问答 >
问题:

Android:Java . io . file Not found exception:不是整个文件

夏朝
2023-03-14

我制作了一个聊天应用程序进行练习,并尝试使用我的可绘制文件夹中的add1.png图像作为默认配置文件图像,无论用户是否放置图像

这是我的代码片段

if (imageUri == null) { //when user has no image
                        //use default image as a profile image that in drawable folder
       imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +
                 "://" + getResources().getResourcePackageName(R.drawable.add1)
                 + '/' + getResources().getResourceTypeName(R.drawable.add1)
                 + '/' + getResources().getResourceEntryName(R.drawable.add1));
}

//insert into firebase storage
FirebaseStorage.getInstance().getReference().child("userImages").child(uid).putFile(imageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {...}

如果运行应用,则会发生异常,但默认映像 (add1.png) 会正确插入到 firebase 存储中。

这里有个例外。

 W/UploadTask: could not retrieve file size for upload android.resource://com.example.harag.myapplication/drawable/add1
          java.io.FileNotFoundException: Not a whole file
              at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:812)
              at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:749)
              at com.google.firebase.storage.UploadTask.<init>(Unknown Source)
              at com.google.firebase.storage.StorageReference.putFile(Unknown Source)
              at com.example.harag.myapplication.SignUpActivity$2$1.onComplete(SignUpActivity.java:92)
              at com.google.android.gms.tasks.zzf.run(Unknown Source)
              at android.os.Handler.handleCallback(Handler.java:739)
              at android.os.Handler.dispatchMessage(Handler.java:95)
              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)

谢谢大家!

共有2个答案

汪正雅
2023-03-14

您可以尝试以下代码

Uri uri = Uri.parse("android.resource://org.xyz.abc/drawable/myimage");
or 
Uri uri=Uri.parse("android.resource://"+context.getPackageName()+"/drawable/myimage");
秦信瑞
2023-03-14

您需要使用上传任务上传任务,可用于管理和监视上传的状态。

Uri file = Uri.fromFile(new File("path/to/images/rivers.jpg"));
StorageReference riversRef = storageRef.child("images/"+file.getLastPathSegment());
uploadTask = riversRef.putFile(file);

// Register observers to listen for when the download is done or if it fails
uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle unsuccessful uploads
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
        Uri downloadUrl = taskSnapshot.getDownloadUrl();
    }
});

Firebase上传文件

 类似资料:
  • 在我的一个项目中,我们支持使用XML进行数据输入。由于XML是一个用户输入文件,它很有可能是一个有效的XML,但有一些语义错误(例如字符串长度大于允许的限制等)。 目前我正在使用javax。xml。验证。Validator验证给定文档,但即使一个元素有语义错误,也会失败。我想要的是能够跳过这些元素,而不是跳过整个XML。我知道我们可以为验证器设置一个错误处理程序,我可以在其中跳过此类错误,但这意味

  • 问题内容: 我有一个用于Go包的测试套件,该套件实现了十二个测试。有时,套件中的一项测试失败了,我想单独重新运行该测试,以节省调试时间。这可能吗,还是每次都必须为此编写一个单独的文件? 问题答案: 使用该标志运行特定的测试。该标志记录在go工具文档的测试标志部分中:

  • 对于一个Box2D组合,我需要这段代码来避免无意中的点击: null null 目前,它适用于整个文档。但我希望它仅适用于 。 怎么可能编码呢? 会非常感谢你的帮助!

  • 我知道,如果创建并写入zip文件,我会将ZipOutputStream环绕在OutputStream(或子类)周围,如下所示: fos=new FileOutputStream(fileName) zOut=new ZipOutputStream(fos); 我还知道如何创建zip文件,以及需要指定何时添加新条目和何时关闭条目。我想做的是加密存档中的文件,但保持存档未加密,这样条目仍然很容易找到。

  • Jsoups解析是否存在某种类型的限制。我一直在处理内存问题,这是我在这个网站上公开的另一个问题,但我开始意识到我甚至没有得到我需要的所有信息。 我正在使用jsoup来解析一个html页面,它是一个测试页面,里面只有数百万个由空白分隔的数字。当我用jsoup解析它时,我可以得到一些文本,但它不会得到全部。 例如,如果我有一个,它包含来自.parse()的html,那么它只有整个网页中数字的一半。如