0

我开发了一个非常简单的 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 指令上。

if (aux.contains(" ")){
    aux = aux.replace(" ", "%20");                
}
4

3 回答 3

2

如果这条指令抛出 NPE

if (aux.contains(" "))

所以很明显 aux 是 null,所以你不能在 null 上调用 contanis 方法。添加一些对空状态的检查

if ( aux!=null && aux.contains(" "))
于 2013-01-15T14:08:49.190 回答
0

使用replaceAll()代替replace()

if (aux.contains(" ")){
     aux.replaceAll(" ", "%20");                
}


参考:

String  replace(CharSequence target, CharSequence replacement)

复制此字符串,将出现的指定目标序列替换为另一个序列。

String  replaceAll(String regularExpression, String replacement)

用给定的替换替换此字符串中正则表达式的所有匹配项。

于 2011-08-18T15:33:22.907 回答
0
if (aux.contains(" ")){

如果 aux 为空,则抛出 NPE。它应该是

if (anx != null && aux.contains(" ")){
于 2011-08-18T15:39:18.977 回答