Как использовать AsyncTask для обработки асинхронных RestRequests - PullRequest
0 голосов
/ 22 июня 2019

Я хочу получить доступ к онлайн-API через приложение для Android.Для этого я написал простые в доступе функции для отправки запросов через пакет Android Volley.Однако приложение сразу отображает 0, когда я пытаюсь присвоить значение, полученное при отправке запроса, в TextView.Я понимаю, что это, вероятно, потому, что функция обрабатывает объект как «ноль», потому что ответ еще не прибыл, и что мне нужно использовать AsyncTasks, чтобы справиться с этим должным образом, но Руководство разработчика от Android Studio на самом деле мне не очень помогло, потому что, чтобы быть на 100% честным с вами, я не инженер-программист, и я абсолютно потерян на этом этапе.

Вот некоторый код о том, как я получаю доступ к API:

    org.json.JSONObject makeRequest(String URL, String method, String[] headers){
    int reqType;

    switch(method.toUpperCase()){
        case "GET":
            reqType = Request.Method.GET;
            break;
        case "DELETE":
            reqType = Request.Method.DELETE;
            break;
        default:
            return null;
    }
    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>(){
        @Override
        public void onResponse(JSONObject Response){
            result = Response;
        }
    };
    Response.ErrorListener err = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            result = null;
        }
    };
    JsonObjectRequest req = new JsonObjectRequest(reqType, URL, null, listener, err){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String>  params = new HashMap<String, String>();
            params.put(headers[0], headers[1]);

            return params;
        }
    };
    ;
    rQ_volley.add(req);

    return result;
}

И, кроме того, немного кода о том, где я получаю доступ к описанному выше методу

    JSONArray koordTargetArr = rBuild.makeRequestArr("https://nominatim.openstreetmap.org/search?q="+target+"&format=json&polygon=1&addressdetails=1", "get",headersLonLat);
    if(koordTargetArr != null) {
        JSONObject koordTargetOBJ = koordTargetArr.getJSONObject(0);
        koordTarget = koordTargetOBJ.getString("lon").concat(",").concat(koordTargetOBJ.getString("lat"));
    }
    else return 0;

. Буду признателен за любую помощь, которую вы можете мне дать, например, о том, где я реализую AsyncTask и как я его создаю.У меня есть опыт работы с асинхронной библиотекой в ​​Node.js, если это вообще помогает.

РЕДАКТИРОВАТЬ: Это НЕ дубликат Как использовать java.net.URLConnection для запуска и обработки HTTP-запросов Я уже знаю, как отправлять HTTP-запросы, я не знаю, как использовать Android AsyncTask, HTTP-запросы НЕ являются темой этого вопроса.

1 Ответ

0 голосов
/ 22 июня 2019

Рассматривали ли вы возможность использования дооснащения ?

Он будет обрабатывать, создавать и десериализовывать все потребности вашей сети без необходимости использовать функции пользовательских утилит AsyncTask +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...