替换char序列时返回nullPointerException

时间:2011-08-18 14:23:07

标签: android nullpointerexception charsequence

我开发了一个非常简单的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");                
}

3 个答案:

答案 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(" ")){