我开发了一个非常简单的Android应用程序然后我混淆了代码。当我可能替换char序列时抛出nullPointerException。
这是我的堆栈跟踪:
java.lang.NullPointerException
at com.xpandit.pemobile.android.loadactivity.ak.d(Unknown Source)
at com.xpandit.pemobile.android.loadactivity.g.onTextChanged(Unknown Source)
at android.widget.TextView.sendOnTextChanged(TextView.java:6335)
at android.widget.TextView.handleTextChanged(TextView.java:6376)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6520)
at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583)
at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174)
at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:257)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
正如我所说的代码是混淆的,并且通过映射文件我找到了正确的方法(至少我认为)。问题是:在什么情况下,replace方法可以抛出空指针?
也许问题不是替换方法!谁能告诉我问题在哪里以及如何解决?提前谢谢......
修改 我认为问题必须放在简单的指令上。
if (aux.contains(" ")){
aux = aux.replace(" ", "%20");
}
答案 0 :(得分:1)
如果此指令抛出NPE
if (aux.contains(" "))
所以很明显aux是null,所以你不能在null上调用contanis方法。 添加一些空状态检查
if ( aux!=null && aux.contains(" "))
答案 1 :(得分:0)
使用replaceAll()
代替replace()
if (aux.contains(" ")){
aux.replaceAll(" ", "%20");
}
参考:
String replace(CharSequence target, CharSequence replacement)
复制此字符串,将指定目标序列的出现次数替换为另一个序列
String replaceAll(String regularExpression, String replacement)
使用给定的替换替换此字符串中regularExpression的所有匹配项。
答案 2 :(得分:0)
if (aux.contains(" ")){
如果aux为null,则抛出NPE。它应该是
if (anx != null && aux.contains(" ")){