AsyncTask становится нулевым - PullRequest
1 голос
/ 29 мая 2019

Я работаю, запрашивая у API OpenWeather с AsyncTask, но ответ не возвращает ни одной строки, это пустое значение, поэтому я не смог обработать.Обычно он работает в главном потоке, когда я разрешаю StrictMode (supress NetworkOnMainThreadException), но с AsyncTask я не смог получить результат.Также печатает слишком много работы внутри основного потока в logcat.В чем может быть причина?

Метод getWeather () , вызванный из onCreate () метод MapsActivity

public void getWeather(double lat, double lon) throws IOException, JSONException {
            Log.i("lat and lon", String.valueOf((int)lat) + String.valueOf((int)lon));

            String url = "http://api.openweathermap.org/data/2.5/weather?lat="
                    + (int)lat+"&lon="
                    + (int)lon
                    +"&APPID=apikey";

            //new requestWeatherAsync().execute(url);
            new requestWeatherAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,url);

            if (mPlaceName != "")
            Toast.makeText(MapsActivity.this, mPlaceName
                            + ", Temp: " + String.valueOf(temperature)
                            + DEGREE
                            + "C, situation: " + capitalize(description)
                    , Toast.LENGTH_LONG).show();
        }

Метод requestWeatherAsync () , вызванный из getWeather ()

package com.nurettinabaci.mapweather;

import android.os.AsyncTask;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class requestWeatherAsync extends AsyncTask<String, Void, String> {

    OkHttpClient client = new OkHttpClient();

    @Override
    protected String doInBackground(String... params) {

        Request request = new Request.Builder()
                .url(params[0])
                .get()
                .build();
        try {
            Response response = client.newCall(request).execute();
            Log.d("ASYNCTASK",response.body().string());
            return response.body().string();

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String jsonData) {
        super.onPostExecute(jsonData);
        Log.i("ASYNCTASK", "onPostExecute");

        try {
            JSONObject json = new JSONObject(jsonData);

            // temperature
            JSONObject tempData = new JSONObject(json.getString("main"));
            double temp = Double.parseDouble(tempData.getString("temp"));
            MapsActivity.temperature = (int) (temp -273.15); 
            // weather description
            JSONArray weatherInfo = new JSONArray(json.getString("weather")); // weather blok
            JSONObject weatherData = weatherInfo.getJSONObject(0);
            MapsActivity.description = weatherData.getString("description");
            MapsActivity.mPlaceName = json.getString("name");

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}


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