Monday 26 August 2019

android - Trouble with making a method into an AsyncTask



I'm have a frustratingly tough time figuring this out. I guess I'm just not understanding how to correctly assemble an AsyncTask. I have this method in my class but want it to run as an AsyncTask instead of just bogging everything down when it gets called. Can anyone help? Thanks in advance.




private void getDatesNames() {
JSONParser jParser = new JSONParser();

JSONObject json = jParser.getJSONFromUrl(url);

ArrayList dates = new ArrayList();
ArrayList teams = new ArrayList();


try {


contacts = json.getJSONArray(TAG_CONTACTS);


for(int i = 0; i < contacts.length(); i++){
JSONObject c = contacts.getJSONObject(i);

if ((c.getString(TAG_EMAIL1)).contains(league)) {

// Storing each json item in variable

String id = c.getString(TAG_ID);
String email1 = c.getString(TAG_EMAIL1);
String email2 = c.getString(TAG_EMAIL2);


dates.add(id);
teams.add(email1);
teams.add(email2);
}
}


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


LinkedHashSet hs1 = new LinkedHashSet();
LinkedHashSet hs2 = new LinkedHashSet();

hs1.addAll(dates);

hs2.addAll(teams);
dates.clear();
teams.clear();
dates.addAll(hs1);
teams.addAll(hs2);

for (int i = 0; i < dates.size(); ++i) {
adapter1.add(dates.get(i));
}


for (int i = 0; i < teams.size(); ++i)
{

adapter2.add(teams.get(i));

}

Answer



Just stick your slow stuff in the doInBackground. Where you are filling in two arrays, its probably better to just make them private final, so the different aspects can see them.




 AsyncTask newTask =  new AsyncTask() {

private final ArrayList dates = new ArrayList();
private final ArrayList teams = new ArrayList();
@Override
protected void onPreExecute() {
//You dont' really need anything here, so you could leave out onPreExecute()...
}

@Override

protected ArrayList doInBackground(Void... params) {
JSONParser jParser = new JSONParser();

JSONObject json = jParser.getJSONFromUrl(url);

try {

contacts = json.getJSONArray(TAG_CONTACTS);

for(int i = 0; i < contacts.length(); i++){

JSONObject c = contacts.getJSONObject(i);

if ((c.getString(TAG_EMAIL1)).contains(league)) {

// Storing each json item in variable
String id = c.getString(TAG_ID);
String email1 = c.getString(TAG_EMAIL1);
String email2 = c.getString(TAG_EMAIL2);



dates.add(id);
teams.add(email1);
teams.add(email2);
}
}

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



LinkedHashSet hs1 = new LinkedHashSet();
LinkedHashSet hs2 = new LinkedHashSet();

hs1.addAll(dates);
hs2.addAll(teams);
dates.clear();
teams.clear();
dates.addAll(hs1);
teams.addAll(hs2);


}

@Override
protected void onPostExecute(ArrayList fileList) {
// dismiss dialog if necessary
for (int i = 0; i < dates.size(); ++i) {
adapter1.add(dates.get(i));
}


for (int i = 0; i < teams.size(); ++i)
{

adapter2.add(teams.get(i));

}
}

};
newTask.execute();


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...