Как я могу бросить пользовательское исключение из методов Volley onResponse и onErrorResponse - PullRequest
0 голосов
/ 11 января 2020

У меня есть код, который обращается к API, который возвращает серию географических точек для построения велосипедного маршрута. Таким образом, я сначала выбираю объект JSON, а затем транслирую его в графические точки. У меня есть APIGenericException для всех исключений, связанных с этим API, и я хочу выдать APiRequestException (который является подклассом APIGenericException), если запрос к API не выполнен. Я не могу понять, как бросить это, поскольку метод onErrorResponse () от Volley не вызывает исключение. В дополнение к этому convertResponseToWayPoints также генерирует исключение, но я не уверен, как передать это в onResponse и в метод requestRouteFromAPI.

 public void requestRouteFromAPI(Context mainActivityContext, final String url) throws APIGenericException {
        RequestQueue queue = Volley.newRequestQueue(mainActivityContext);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                convertResponseToWayPoints(response);
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error){
                // TODO: Handle error
                Log.e("ERROR", "Error occurred ", error);
                throw new APiRequestException(url);
            }
        });      queue.add(jsonObjectRequest);}

1 Ответ

0 голосов
/ 11 января 2020

Я думаю, что у меня может быть решение, но я не уверен на 100% из-за непонимания того, как работает запрос Волли. Если запрос является синхронным, будет ли это способом решения проблемы? Добавив назначенный JSONObject, а затем обработав его вне метода.

private JSONObject APIrequestResponse;

public void getRoute(Context mainActivityContext) throws CycleStreetsException {
            requestRouteFromCycleStreets(mainActivityContext, getAPIURL());
            if(APIrequestResponse == null){
                throw new CycleStreetsRequestException(getAPIURL());
            }
            else{
                //make routes
            }
    }

public void requestRouteFromAPI(Context mainActivityContext, final String url) throws APIGenericException {
        RequestQueue queue = Volley.newRequestQueue(mainActivityContext);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                APIrequestResponse = response;
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error){
                // TODO: Handle error
                Log.e("ERROR", "Error occurred ", error);
                APIrequestResponse = null;
            }
        });      queue.add(jsonObjectRequest);}
...