Я работаю, запрашивая у 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();
}
}
}