nullPointerException при замене последовательности символов - PullRequest
0 голосов
/ 18 августа 2011

Я разработал очень простое приложение для Android, а затем запутал код.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)

Как я уже сказал, код обфусцирован и файлом сопоставлениянашел правильный метод (по крайней мере, я думаю).Вопрос в том, в какой ситуации метод замены может выдать нулевой указатель?

Возможно, проблема не в методе замены!Может кто-нибудь сказать мне, где проблема и как ее решить?Заранее спасибо ...

РЕДАКТИРОВАТЬ: Я думаю, что проблема должна быть на этом простом, если инструкция.

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

Ответы [ 3 ]

1 голос
/ 15 января 2013

, если эта инструкция выбрасывает NPE

if (aux.contains(" "))

Итак, ясно, что aux равен null, поэтому вы не можете вызывать метод contanis для null. Добавьте проверку на нулевое состояние

if ( aux!=null && aux.contains(" "))
0 голосов
/ 18 августа 2011
if (aux.contains(" ")){

бросает NPE, если aux равен нулю.Это должно быть

if (anx != null && aux.contains(" ")){
0 голосов
/ 18 августа 2011

Используйте replaceAll() вместо replace()

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


Справка:

String  replace(CharSequence target, CharSequence replacement)

Копирует эту строку, заменяя вхождения указанной целевой последовательности другой последовательностью.

String  replaceAll(String regularExpression, String replacement)

Заменяет все совпадения для регулярного выражения в этой строке на указанную замену.

...