我使用AsnycTask连接URL并解析返回的xml:
class Connecting extends AsyncTask<String, String, String> {
private String URLPath = "";
private HttpURLConnection Connection;
private InputStream InputStream;
private boolean Return1 = false;
private int Return2 = -1;
public Connecting (String fn, String u) {
FileName = fn;
URLPath = u;
Connection = null;
InputStream = null;
Return1 = false;
Return2 = -1;
execute();
}
public boolean getReturn1() {
return Return1;
}
public int getReturn2() {
return Return2;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... aurl) {
try {
URL url = new URL(URLPath);
Connection = (HttpURLConnection)url.openConnection();
Connection.setConnectTimeout(10000);
Connection.setReadTimeout(10000);
Connection.setDoInput(true);
Connection.setUseCaches(false);
Connection.connect();
InputStream = Connection.getInputStream();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String unused) {
super.onPostExecute(unused);
try {
InputStreamReader fsr = new InputStreamReader(InputStream);
BufferedReader br = new BufferedReader(fsr);
String line = "";
while((line = br.readLine()) != null) {
//parse Reture1 and Return2
}
}
catch(Exception e) {
e.printStackTrace();
}
Connection = null;
}
}
我使用下面的代码来调用它:
Connecting con = new Connecting(Name, URL);
System.out.println("Return1 " + con.getReturn1());
System.out.println("Return2 " + con.getReturn2());
它将获得false
和-1
,即init值
并在打印消息后连接URL
我想从xml获得连接成功和解析的值
我该怎么做?
答案 0 :(得分:1)
AsyncTask
与主线程异步运行(如名称所示)。
如果您希望在任务完成后发生某些事情,则必须将该代码放在onPostExecute()
方法中。
所以你可以把System.out
放在那里。
答案 1 :(得分:1)
AsyncTask是一个有助于在后台运行的类。如果要使用例如HTTP连接访问远程服务器,则可以使用它。 在doBackground方法中,您必须执行“繁重”任务,即需要时间并可能阻止UI的任务。当你在doBackground结束时完成时,你必须返回作为任务结果的值。 然后在onPostExecute中使用此结果更新例如UI。 在你的情况下,在我看来你没有正确使用AsyncTask。首先,你在doBackground中返回null,并且不要设置return1和return2。 在onPostExecute中你读取响应,而yuo应该在doBackground中执行。 你可以覆盖的另一种方法是在doBackground方法之前调用的onPreExecute。
在我的博客中,我举了一个如何在这种情况下使用AsyncBackground的例子,它可以帮到你。如果你喜欢看看here