【问题标题】:Trouble with making a method into an AsyncTask将方法变成 AsyncTask 时遇到问题
【发布时间】:2013-09-01 04:24:26
【问题描述】:
我很难弄清楚这一点。我想我只是不明白如何正确组装 AsyncTask。我在我的课堂上有这个方法,但希望它作为 AsyncTask 运行,而不是在调用它时让所有东西都陷入困境。任何人都可以帮忙吗?提前致谢。
private void getDatesNames() {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(url);
ArrayList<String> dates = new ArrayList<String>();
ArrayList<String> teams = new ArrayList<String>();
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));
}
【问题讨论】:
标签:
android
methods
android-asynctask
【解决方案1】:
您需要在doInBackground(String... arg) 中运行getDateNames()。看看this tutorial。它也适用于 JSON 并使用 AsyncTasks。
【解决方案2】:
只需将慢速的东西放在 doInBackground 中即可。在填写两个数组的地方,最好将它们设为 private final,以便不同的方面可以看到它们。
AsyncTask<Void, Void, Void> newTask = new AsyncTask<Void, Void, Void>() {
private final ArrayList<String> dates = new ArrayList<String>();
private final ArrayList<String> teams = new ArrayList<String>();
@Override
protected void onPreExecute() {
//You dont' really need anything here, so you could leave out onPreExecute()...
}
@Override
protected ArrayList<String> 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<String> 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();