簡體   English   中英

Html.fromHtml不斷拋出NullPointerException

[英]Html.fromHtml keeps throwing NullPointerException

假設我有一個已格式化為包含粗體字母的字符串。 但是在某些時候,我需要能夠刪除格式。 以下是我嘗試過但一直得到的NullPointerException

這是我的方法

public String stripFormatting(String input){
    return Html.fromHtml(input).toString();
}

這是電話

stripFormatting("<b>0</b>")

錯誤跟蹤說明不多,但是這里

java.lang.NullPointerException
at com.mypkg.utils.MyClassTest.stripFormatting(MyClassTest.java:111)
at com.mypkg.utils.MyClassTest.testLessThan100_000(MyClassTest.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

我看到您正在嘗試從單元測試中運行它-調用Html.fromHtml 將無法按預期工作,因為單元測試無法使用Android依賴代碼。

根據模擬Android依賴項下的構建本地單元測試https://developer.android.com/training/testing/unit-testing/local-unit-tests.html-

默認情況下,Android Gradle插件針對android.jar庫的修改版本執行本地單元測試,該版本不包含任何實際代碼。 相反,從單元測試對Android類的方法調用將引發異常。 這是為了確保您僅測試代碼,並且不依賴於Android平台的任何特定行為(尚未明確模擬)。

不過,它很容易修復-只需將您的測試從單元測試更改為儀器測試(即,在androidTest目錄下,該目錄實際上將使用完整的android.jar而不是單元測試之類的存根)。 運行起來會慢一些,但至少應該正確執行。

某些事情是可模擬的(例如,如上鏈接中所述,通過Mockito從context getString ),但不適用於靜態方法。 我懷疑如果您正在測試HTML剝離,那么您將需要實際測試其是否在按預期進行,因此,進行測試是一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM