2016-09-26 4 views
0

В моем приложении для Android я применил asynctask для проверки ответов сервера. Он работал нормально до языковой проблемы. Я отправляю пользователю Google email id и user name на сервер для аутентификации.Проблемы с анализом языка Android

Но сервер отправляет ошибки, когда имя пользователя отличное от English.

Вот мой код. , ,

HttpAsyncTaskCheckAuth checkAuth = new HttpAsyncTaskCheckAuth(SignUpActivity.this); 
       checkAuth.execute("http://www.server_address.com//auth/login?email=" + 
         email + 
         "&name=" + name + 
         "&logged_in=" + "true"); 

Это работает нормально, если я ввожу имя, которое English. Когда пользователь вводит имя, которое не является английским, сервер не выполняется успешно.

Вот сообщение об ошибке я получил в LogCat

09-26 16:09:34.567 3838-3838/package_name W/System.err: org.json.JSONException: Value Traceback of type java.lang.String cannot be converted to JSONArray 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:96) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:108) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at package_name.asyncTask.HttpAsyncTaskCheckAuth.onPostExecute(HttpAsyncTaskCheckAuth.java:53) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at package_name.asyncTask.HttpAsyncTaskCheckAuth.onPostExecute(HttpAsyncTaskCheckAuth.java:18) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.os.AsyncTask.finish(AsyncTask.java:636) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.os.AsyncTask.access$500(AsyncTask.java:177) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.os.Looper.loop(Looper.java:145) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6856) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
09-26 16:09:34.567 3838-3838/package_name W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

Как я могу преобразовать имя в формиата, которая будет выполнена успешно?

Я попытался следующие методы, но те не работали для меня

URLDecoder.decode(name, "UTF-8").replaceAll(" ","%20") 

и

URLEncoder.encode(name, "UTF-8").replaceAll(" ","%20") 

Когда я проверил тот же URL на Postman расширение в Chrome, я получаю следующее сообщение об ошибке

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1401, in _stack_context_handle_exception 
    raise_exc_info((type, value, traceback)) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 314, in wrapped 
    ret = fn(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1613, in future_complete 
    f.result() 
    File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 232, in result 
    raise_exc_info(self._exc_info) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 282, in wrapper 
    yielded = next(result) 
    File "startup.py", line 15884, in get 
    print user["name"] 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128) 

Просьба предложить мне возможные пути решения этой проблемы.

+0

, что ошибка сервера отправки при отправке имя в другой, что английский язык? –

+0

@BhawnaRaheja У меня есть эта ошибка org.json.JSONException: Значение Traceback типа java.lang.String не может быть преобразовано в JSONArray – anuradha

+0

Обновите вопрос с помощью точной ошибки, которую вы получите. – Tigger

ответ

-1

Вы должны использовать URLEncoder вместо URLDecoder. Ваш URL должен быть закодирован, а не декодирован при доступе к веб-источникам.

All other characters are unsafe and are first converted into one or more bytes using some encoding scheme. Then each byte is represented by the 3-character string "%xy", where xy is the two-digit hexadecimal representation of the byte. The recommended encoding scheme to use is UTF-8. However, for compatibility reasons, if an encoding is not specified, then the default encoding of the platform is used.

https://developer.android.com/reference/java/net/URLEncoder.html

+0

Я пробовал как URLEncoder, так и URLDecoder. Но никто из них не работал. – anuradha

+0

вы можете поделиться здесь, как вы сделали кодировку? – user1506104

+0

URLEncoder.encode (имя, «UTF-8»). ReplaceAll («", "% 20") – anuradha

Смежные вопросы