Чтение данных JSON из Volley NetworkResponse ⇐ Android
-
Гость
Чтение данных JSON из Volley NetworkResponse
В Android я делаю HTTP-запрос на загрузку файла на сервер следующим образом:
MultipartRequest multipartRequest = new MultipartRequest(uploadUrl, null, mimeType, multipartBody, new Response.Listener() { @Override public void onResponse (ответ NetworkResponse) { // Здесь нужно прочитать ответ Json } }, новый Response.ErrorListener() { @Override public void onErrorResponse (ошибка VolleyError) { Log.d(GlobalClass.TAG, «Файл не загружен»); } }); GlobalClass.getInstance().addToRequestQueue(multipartRequest); } Ответ имеет следующую структуру:
{ 'response': 'some_data_to_be_used' } А это мой класс MultipartRequest:
пакет com.xxxxxx.xxxxxx; импортировать android.util.Log; импортировать com.android.volley.AuthFailureError; импортировать com.android.volley.NetworkResponse; импортировать com.android.volley.ParseError; импортировать com.android.volley.Request; импортировать com.android.volley.Response; импортировать com.android.volley.VolleyError; импортировать com.android.volley.toolbox.HttpHeaderParser; импортировать java.util.Map; класс MultipartRequest расширяет Request { частный окончательный Response.Listener mListener; частный окончательный Response.ErrorListener mErrorListener; частная финальная карта Map mHeaders; частная окончательная строка mMimeType; частный конечный байт [] mMultipartBody; public MultipartRequest(String url, заголовки Map, String mimeType, byte[] multipartBody, Response.Listener прослушиватель, Response.ErrorListener errorListener) { супер(Метод.POST, URL, errorListener); this.mListener = слушатель; this.mErrorListener = errorListener; this.mHeaders = заголовки; this.mMimeType = mimeType; this.mMultipartBody = multipartBody; } @Override public Map getHeaders() выдает AuthFailureError { return (mHeaders!= null)? mHeaders: super.getHeaders(); } @Override публичная строка getBodyContentType() { вернуть ммиметип; } @Override public byte[] getBody() выдает AuthFailureError { вернуть mMultipartBody; } @Override protected Response parseNetworkResponse (ответ NetworkResponse) { пытаться { вернуть Ответ.успех( ответ, HttpHeaderParser.parseCacheHeaders(ответ)); } catch (Исключение е) { return Response.error(new ParseError(e)); } } @Override protected void DeliverResponse (ответ NetworkResponse) { Log.d(GlobalClass.TAG, response.toString()); mListener.onResponse(ответ); } @Override public void DeliverError (ошибка VolleyError) { mErrorListener.onErrorResponse(ошибка); } } В моем методе parseNetworkResponse я попробовал следующее:
protected Response parseNetworkResponse(ответ NetworkResponse) { пытаться { Log.d(GlobalClass.TAG, response.toString()); String json = новая строка (response.data, HttpHeaderParser.parseCacheHeaders (ответ)); вернуть Ответ.успех( ответ, HttpHeaderParser.parseCacheHeaders(ответ)); } catch (Исключение е) { return Response.error(new ParseError(e)); } } Это я взял отсюда. Но это дает мне ошибку Невозможно разрешить конструктор String(byte[],com.android.volley.Cache.Entry).
Как прочитать объект ответа JSON и использовать значение ключа response в виде строки?
В Android я делаю HTTP-запрос на загрузку файла на сервер следующим образом:
MultipartRequest multipartRequest = new MultipartRequest(uploadUrl, null, mimeType, multipartBody, new Response.Listener() { @Override public void onResponse (ответ NetworkResponse) { // Здесь нужно прочитать ответ Json } }, новый Response.ErrorListener() { @Override public void onErrorResponse (ошибка VolleyError) { Log.d(GlobalClass.TAG, «Файл не загружен»); } }); GlobalClass.getInstance().addToRequestQueue(multipartRequest); } Ответ имеет следующую структуру:
{ 'response': 'some_data_to_be_used' } А это мой класс MultipartRequest:
пакет com.xxxxxx.xxxxxx; импортировать android.util.Log; импортировать com.android.volley.AuthFailureError; импортировать com.android.volley.NetworkResponse; импортировать com.android.volley.ParseError; импортировать com.android.volley.Request; импортировать com.android.volley.Response; импортировать com.android.volley.VolleyError; импортировать com.android.volley.toolbox.HttpHeaderParser; импортировать java.util.Map; класс MultipartRequest расширяет Request { частный окончательный Response.Listener mListener; частный окончательный Response.ErrorListener mErrorListener; частная финальная карта Map mHeaders; частная окончательная строка mMimeType; частный конечный байт [] mMultipartBody; public MultipartRequest(String url, заголовки Map, String mimeType, byte[] multipartBody, Response.Listener прослушиватель, Response.ErrorListener errorListener) { супер(Метод.POST, URL, errorListener); this.mListener = слушатель; this.mErrorListener = errorListener; this.mHeaders = заголовки; this.mMimeType = mimeType; this.mMultipartBody = multipartBody; } @Override public Map getHeaders() выдает AuthFailureError { return (mHeaders!= null)? mHeaders: super.getHeaders(); } @Override публичная строка getBodyContentType() { вернуть ммиметип; } @Override public byte[] getBody() выдает AuthFailureError { вернуть mMultipartBody; } @Override protected Response parseNetworkResponse (ответ NetworkResponse) { пытаться { вернуть Ответ.успех( ответ, HttpHeaderParser.parseCacheHeaders(ответ)); } catch (Исключение е) { return Response.error(new ParseError(e)); } } @Override protected void DeliverResponse (ответ NetworkResponse) { Log.d(GlobalClass.TAG, response.toString()); mListener.onResponse(ответ); } @Override public void DeliverError (ошибка VolleyError) { mErrorListener.onErrorResponse(ошибка); } } В моем методе parseNetworkResponse я попробовал следующее:
protected Response parseNetworkResponse(ответ NetworkResponse) { пытаться { Log.d(GlobalClass.TAG, response.toString()); String json = новая строка (response.data, HttpHeaderParser.parseCacheHeaders (ответ)); вернуть Ответ.успех( ответ, HttpHeaderParser.parseCacheHeaders(ответ)); } catch (Исключение е) { return Response.error(new ParseError(e)); } } Это я взял отсюда. Но это дает мне ошибку Невозможно разрешить конструктор String(byte[],com.android.volley.Cache.Entry).
Как прочитать объект ответа JSON и использовать значение ключа response в виде строки?
Мобильная версия