HarmonyOS鸿蒙Next中云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method如何解决

HarmonyOS鸿蒙Next中云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method如何解决

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method ‘com.huawei.agconnect.cloud.storage.core.StorageTask com.huawei.agconnect.cloud.storage.core.DownloadTask.addOnSuccessListener(com.huawei.hmf.tasks.OnSuccessListener)’ on a null object reference

W/System.err: at com.lqc.cloud_storage.MainActivity.downloadFile(MainActivity.java:117) at com.lqc.cloud_storage.MainActivity.downloadFile(MainActivity.java:104) at java.lang.reflect.Method.invoke(Native Method)

在这个报错我定位到的错误代码如下:

downloadTask.addOnSuccessListener(downloadResult -> mShowResultTv.setText("download success!"))
        .addOnFailureListener(e -> mShowResultTv.setText("download failure!"))
        .addOnProgressListener(downloadResult -> mshowProgerss
                .setText(String.format("progress: %f", (downloadResult.getBytesTransferred()*1.0)/downloadResult.getTotalByteCount()*100)+"%")

是哪里出现了空指针,没找明白

downloadTask明明赋值了,怎么会是空的呢?

下载代码:

private void downloadFile() {
    String fileName = "download_" + System.currentTimeMillis() + ".jpg";
    final String path = "test.jpg";
    String agcSdkDirPath = getAGCSdkDirPath();
    final File file = new File(agcSdkDirPath, fileName);
    StorageReference storageReference = mAGCStorageManagement.getStorageReference(path);
    DownloadTask downloadTask = storageReference.getFile(file);

    try {
        downloadTask.addOnSuccessListener(downloadResult -> mShowResultTv.setText("download success!"))
                .addOnFailureListener(e -> mShowResultTv.setText("download failure!"))
                .addOnProgressListener(downloadResult -> mshowProgerss
                        .setText(String.format("progress: %f", (downloadResult.getBytesTransferred()*1.0)/downloadResult.getTotalByteCount()*100)+"%");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
private String getAGCSdkDirPath() {
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AGCSdk/";
    System.out.println("path=" + path);
    File dir = new File(path);
    if (!dir.exists()) {
        dir.mkdirs();
    }
    return path;
}

更多关于HarmonyOS鸿蒙Next中云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method如何解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

storageReference.getFile(file) ,从这块看获取文件是空,可以先检查下文件能否获取到。

更多关于HarmonyOS鸿蒙Next中云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者您好,相关问题已经反馈给工作人员,稍后会再回复您,感谢您对华为开发者论坛的支持。

姓名: 张三
职业: 软件工程师
技能: Python, Java, C++
简介: 拥有超过十年的软件开发经验,熟悉多种编程语言和技术。

看日志,感觉是downloadTask是空。可以试试debug一下看看,一行一行跑一下看。

在HarmonyOS鸿蒙Next中,云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method异常,通常是由于在调用某个对象的方法时,该对象为null导致的。以下是可能的原因和解决方法:

  1. 检查对象初始化:确保在调用方法之前,相关对象已经正确初始化。例如,检查云存储客户端、文件对象等是否已正确创建并赋值。

  2. 空指针检查:在调用方法之前,添加空指针检查。例如:

    if (object != null) {
        object.method();
    }
    
  3. 调试日志:在关键代码段添加日志输出,检查对象的状态和值,帮助定位问题。

  4. 异常捕获:使用try-catch块捕获异常,避免程序崩溃,并记录异常信息以便进一步分析。

  5. API调用顺序:确保API调用顺序正确,避免在对象未准备好时调用其方法。

  6. 依赖注入:如果使用依赖注入框架,确保依赖项已正确注入,避免null值。

  7. 生命周期管理:检查对象的生命周期,确保在对象销毁后不再调用其方法。

  8. 资源释放:确保在释放资源后不再访问相关对象,避免null引用。

通过以上方法,可以有效解决java.lang.NullPointerException异常问题。

在HarmonyOS鸿蒙Next中,云存储下载文件时出现java.lang.NullPointerException: Attempt to invoke virtual method,通常是由于调用了空对象的方法。

  • 检查对象初始化:确保在调用方法前,相关对象已正确初始化。
  • 空值检查:在调用方法前,添加空值检查,如if (object != null)
  • 调试日志:添加日志输出,定位空指针异常的具体位置。
  • API调用:确认云存储API的使用是否正确,参数是否合法。

通过这些步骤,可以有效定位并解决空指针异常问题。

回到顶部