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)

私が言ったように、コードは難読化されており、マッピング ファイルによって正しい方法を見つけました (少なくとも私はそう思います)。問題は、どのような状況で置換メソッドが null ポインターをスローできるかということです。

多分問題は置換方法ではありません! 問題の場所と解決方法を誰か教えてもらえますか? 前もって感謝します...

編集: 問題はその単純なif命令にあるに違いないと思います。

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

3 に答える 3

2

この命令が NPE をスローする場合

if (aux.contains(" "))

したがって、aux が null であることは明らかなので、null で contanis メソッドを呼び出すことはできません。null 状態のチェックを追加する

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)

この文字列内のregularExpressionのすべての一致を、指定された置換で置き換えます。

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

aux が null の場合、NPE をスローします。そのはず

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