Aalap Patel Aalap Patel - 1 year ago 78
Android Question

Not able to get value of an integer after callback method response

I have a method which makes an api call and parses response. I am getting integer value of current weather in onResponse method. I want to set this value to the textview but after onResponse method value doesnt preserve. I have made that variable as global too. And this class extends fragment so I am setting value in onViewCreated method.

here is the code of the method with logs...

public class HomeScreen extends Fragment{
int currentWeather = 0;

curWeather = ... initialisation.

public int getCurrentWeather(){

OkHttpClient okHttpClient = new OkHttpClient();
Request re = new Request.Builder().url(forecastURL).build();
Call call = okHttpClient.newCall(re);
call.enqueue(new Callback() {
public void onFailure(Call call, IOException e) {


public void onResponse(Call call, Response response) throws IOException {
String jsonResponse = response.body().string();
JSONObject forecast;
JSONObject currently;
try {
forecast = new JSONObject(jsonResponse);
currently = forecast.getJSONObject("currently");
currentTempFaron = (int) Math.round(currently.getDouble("temperature"));
currentTempCelc = (currentTempFaron - 32) * 5 / 9;

Log.d("weather in try", "" + currentTempCelc); // has weather value
} catch (JSONException e) {
Log.d("weather in response", "" + currentTempCelc); // again has weather value.
return currentTempCelc; //nothing it has at this point after coming out of response.


Answer Source

Do this inside onResponse() after Log.d("weather in response", "" + currentTempCelc);:

getActivity().runOnUiThread(new Runnable() {
    public void run() {

The issue here is that you were trying to update the UI thread from the background thread which is not allowed. You can use runOnUiThread for this purpose though.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download