当我的用户点击登录按钮时,我想点击我的网络服务。我有以下代码可以这样做。
public void onClick(final View view) {
String orgKey = inputCompany.getText().toString();
new getAppInfo().execute("http://example.webservice.com");
这是我的getAppInfo
private class getAppInfo extends AsyncTask<String, Void, String> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
@Override
protected String doInBackground(String... urls) {
String xml = null;
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(urls[0]);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// return XML
return xml;
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
@Override
protected void onPostExecute(String result) {
Document doc = GetDomElement(result); // getting DOM element
NodeList nl = doc.getElementsByTagName("details");
getChildElements(nl);
}
doBackground
正在运行,但onPostExecute
未运行。我已经将它移出了点击它已经工作但我需要它在onClick内。
如何让我在onClick中运行onPostExecute
?
答案 0 :(得分:0)
onPostExecute
后, doInBackground
将始终被调用。尝试在 onPostExecute 中记录以确认此行为。
在 doInBackground 方法中添加常规catch
语句。
catch(Exception e){
e.printStackTrace();
}
答案 1 :(得分:0)
首先,Java中的一般指针 - 类名称通常是大写的CamelCase,方法名称是小写的camelCase。
关于你的问题 - 您是否有机会退出活动或关闭产生任务的对话框?如果它在onclick处理程序之外工作,我猜是有些东西正在破坏AsyncTask试图执行该方法的Handler对象。
尝试在当前Activity的Handler上发布Runnable(执行AsyncTask)。
答案 2 :(得分:0)
语法正确您可能在后台进程中遇到异常,停止后台线程。在doInBackground的末尾添加一个日志语句,或者在try中添加一个catch(Throwable t)。
有信心 - 只要doInBackground成功完成,它就会被调用。
顺便说一句,你也应该在后台进行DOM解析 - 当你在UI线程中进行它时可能会导致ANR弹出窗口。