gpt4 book ai didi

java - AsycTask 不执行

转载 作者:行者123 更新时间:2023-11-29 21:19:44 25 4
gpt4 key购买 nike

我看过很多关于 AsycTask 未运行问题的帖子,想确认这是否确实是我的实现问题。 Should I try to implement this method instead?

我使用 new GetRoutes().execute("test"); 在 onCreate 方法中调用以下方法。 AsyncTask 提供的信息用于构建已解析信息的 ListView。但是,此方法不会按应有的方式更新“值”数组。

private class GetRoutes extends AsyncTask<String, Void, String[]> {
@Override
protected String[] doInBackground(String... urls) {
List<String> in = new ArrayList<String>();
try{
RouteReader route = new RouteReader();
in = route.parse(new URL(RouteReader.URI).openStream());
} catch(IOException iox){
in.add("Major poopoo");
//in.add(getResources().getString(R.string.loading_error));
} catch(ArrayIndexOutOfBoundsException aiob){
in.add("Minor poopoo");
//in.add(getResources().getString(R.string.loading_error));
} catch(NullPointerException npe){
in.add("Small poopoo");
//in.add(getResources().getString(R.string.loading_error));
} catch (XmlPullParserException e) {
in.add(getResources().getString(R.string.loading_error));
}
return in.toArray(new String[in.size()]);
}

@Override
protected void onPostExecute(String[] result) {
values = result;
}
}

RouteReader类如下:

public class RouteReader {
private XmlPullParser parser;

public final static String URI =
"http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=ttc";

public RouteReader(){
parser = Xml.newPullParser();
}

public List<String> parse(InputStream in) throws XmlPullParserException, IOException {
try {
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, null);
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}

private List<String> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<String> entries = new ArrayList<String>();

parser.require(XmlPullParser.START_TAG, null, "body");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("route")) {
entries.add(parser.getAttributeValue(null, "id"));
System.out.println(parser.getAttributeValue(null, "id"));
}
}
return entries;
}
}

你能帮我查明这个实现的问题吗?

最佳答案

如果您的 doInBackground() 方法没有被调用,请尝试像这样调用您的任务,这是一个已知问题:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new GetRoutes().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "test");
else
new GetRoutes().execute("test");

并将其添加到调用异步任务的方法的顶部,(eclipse 会要求您这样做以防万一..)

@SuppressLint("NewApi")

解决方案更新:

如我所见,您在调用 asynktask 后立即实现适配器,但是对于这种异步蜂鸣,您必须等待适配器直到任务完成,通常这是在 onPostExecute() 上发出的 方法,所以替换你的行

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.list_item, android.R.id.text1, values);

list.setAdapter(adapter);

onPostExecute() 中,然后重试

关于java - AsycTask 不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com