Issue
I am using both SwipeRefreshLayout and AsyncTask in my app. I know that if I were to use AsyncTask twice, I will have to create a new instance to get everything running. But when I do this as follow, the process gets stuck and data will not be refreshed. The swipe-button goes on forever and ever.
Here's Function.java
:
public interface AsyncResponse {
void processFinish(String output1, String output2, String output3, String output4, String output5, String output6,
String output7, String output8, String output9, String output10, String output11, String output12,
String output13, String output14, String output15, String output16, String output17, String output18,
String output19, String output20, String output21, String output22, String output23, String output24);
}
public static class placeIdTask extends AsyncTask<String, Void, JSONObject> {
public AsyncResponse delegate = null; //Call back interface
public placeIdTask(AsyncResponse asyncResponse) {
delegate = asyncResponse; //Assigning call back interface through constructor
}
@Override
protected JSONObject doInBackground(String... params) {
JSONObject jsonWeather = null;
try {
jsonWeather = getWeatherJSON();
} catch (Exception e) {
Log.d("Error", "Cannot process JSON results", e);
}
return jsonWeather;
}
@Override
protected void onPostExecute(JSONObject json) {
try {
if (json != null) {
...... // more code
delegate.processFinish(description, temperature, humidity, windspeed, updatedOn, iconText,
first_hour_icon, first_hour_text, first_hour_temperature,
third_hour_icon, third_hour_text, third_hour_temperature,
ninth_hour_icon, ninth_hour_text, ninth_hour_temperature,
first_day_icon, first_day_text, first_day_temperature,
second_day_icon, second_day_text, second_day_temperature,
third_day_icon, third_day_text, third_day_temperature);
}
} catch (JSONException e) {
Log.e("Json Procession failed", e.toString());
}
}
}
public static JSONObject getWeatherJSON() { ... } // to retrieve data from the Internet
Here's MainActivity.java
:
... get everything imported
public class MainActivity extends AppCompatActivity {
... Variables declared
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
weatherFont = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/weathericons-regular-webfont.ttf");
...use findviewbyid to get things working
final Function.placeIdTask asyncTask =new Function.placeIdTask(new Function.AsyncResponse() {
public void processFinish(String weather_description, String weather_temperature, String weather_humidity, String weather_windspeed, String weather_updatedOn, String weather_iconText,
String weather_firstHourIcon, String weather_firstHourText, String weather_firstHourTemperature,
String weather_thirdHourIcon, String weather_thirdHourText, String weather_thirdHourTemperature,
String weather_ninthHourIcon, String weather_ninthHourText, String weather_ninthHourTemperature,
String weather_firstDayIcon, String weather_firstDayText, String weather_firstDayTemperature,
String weather_secondDayIcon, String weather_secondDayText, String weather_secondDayTemperature,
String weather_thirdDayIcon, String weather_thirdDayText, String weather_thirdDayTemperature) {
updatedField.setText(weather_updatedOn);
detailsField.setText(weather_description);
currentTemperatureField.setText(weather_temperature);
humidity_field.setText("Humidity: " + weather_humidity);
windspeed_field.setText("Wind Speed: " + weather_windspeed);
firstHourText.setText(weather_firstHourText);
thirdHourText.setText(weather_thirdHourText);
ninthHourText.setText(weather_ninthHourText);
firstHourTemperature.setText(weather_firstHourTemperature);
thirdHourTemperature.setText(weather_thirdHourTemperature);
ninthHourTemperature.setText(weather_ninthHourTemperature);
firstDayText.setText(weather_firstDayText);
secondDayText.setText(weather_secondDayText);
thirdDayText.setText(weather_thirdDayText);
firstDayTemperature.setText(weather_firstDayTemperature);
secondDayTemperature.setText(weather_secondDayTemperature);
thirdDayTemperature.setText(weather_thirdDayTemperature);
weatherIcon.setText(Html.fromHtml(weather_iconText));
firstHourIcon.setText(Html.fromHtml(weather_firstHourIcon));
thirdHourIcon.setText(Html.fromHtml(weather_thirdHourIcon));
ninthHourIcon.setText(Html.fromHtml(weather_ninthHourIcon));
firstDayIcon.setText(Html.fromHtml(weather_firstDayIcon));
secondDayIcon.setText(Html.fromHtml(weather_secondDayIcon));
thirdDayIcon.setText(Html.fromHtml(weather_thirdDayIcon));
}
});
asyncTask.execute();
refreshLayout = (SwipeRefreshLayout)findViewById(R.id.refresh_layout);
scrollView = (NestedScrollView)findViewById(R.id.nested_scroll_view);
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Function.placeIdTask asyncTask2 =new Function.placeIdTask(new Function.AsyncResponse() {
public void processFinish(String weather_description, String weather_temperature, String weather_humidity, String weather_windspeed, String weather_updatedOn, String weather_iconText,
String weather_firstHourIcon, String weather_firstHourText, String weather_firstHourTemperature,
String weather_thirdHourIcon, String weather_thirdHourText, String weather_thirdHourTemperature,
String weather_ninthHourIcon, String weather_ninthHourText, String weather_ninthHourTemperature,
String weather_firstDayIcon, String weather_firstDayText, String weather_firstDayTemperature,
String weather_secondDayIcon, String weather_secondDayText, String weather_secondDayTemperature,
String weather_thirdDayIcon, String weather_thirdDayText, String weather_thirdDayTemperature) {
updatedField.setText(weather_updatedOn);
detailsField.setText(weather_description);
currentTemperatureField.setText(weather_temperature);
humidity_field.setText("Humidity: " + weather_humidity);
windspeed_field.setText("Wind Speed: " + weather_windspeed);
firstHourText.setText(weather_firstHourText);
thirdHourText.setText(weather_thirdHourText);
ninthHourText.setText(weather_ninthHourText);
firstHourTemperature.setText(weather_firstHourTemperature);
thirdHourTemperature.setText(weather_thirdHourTemperature);
ninthHourTemperature.setText(weather_ninthHourTemperature);
firstDayText.setText(weather_firstDayText);
secondDayText.setText(weather_secondDayText);
thirdDayText.setText(weather_thirdDayText);
firstDayTemperature.setText(weather_firstDayTemperature);
secondDayTemperature.setText(weather_secondDayTemperature);
thirdDayTemperature.setText(weather_thirdDayTemperature);
weatherIcon.setText(Html.fromHtml(weather_iconText));
firstHourIcon.setText(Html.fromHtml(weather_firstHourIcon));
thirdHourIcon.setText(Html.fromHtml(weather_thirdHourIcon));
ninthHourIcon.setText(Html.fromHtml(weather_ninthHourIcon));
firstDayIcon.setText(Html.fromHtml(weather_firstDayIcon));
secondDayIcon.setText(Html.fromHtml(weather_secondDayIcon));
thirdDayIcon.setText(Html.fromHtml(weather_thirdDayIcon));
}
});
asyncTask2.execute();
refreshLayout.setRefreshing(true);
}
});
}
}
I am new to SwipeRefreshLayout and java and Android and find difficulty understanding the document. Can anyone help me out? Thanks in advance.
Solution
Inside processFinish(..) do refreshLayout.setRefreshing(false)
Also you may create the asynctask in one function itself so as to not write the code to instantiate the asnyctask twice.
Also debug your code either by using logs or using the debugger and let me know.
Answered By - Gaurav Vashisth
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.