我正在使用AsyncTask,我发现的有关AsyncTask的所有示例都在一个活动中。
我正在尝试创建一个包含大量活动的应用程序,有些人必须下载HTML页面。我真的不想在每个活动中一直复制粘贴相同的代码。我发现这很脏。
所以我需要将它作为特殊类Async HttpGet来实现,并使用参数传递函数。我将在doinbackground之后执行(每个活动都不同)。
这是可能的,还是我需要在每个活动中复制粘贴我的代码,并在下载HTML页面后更改背景中的操作以执行我需要的操作?
答案 0 :(得分:3)
只需创建一个扩展AsyncTask
即可重复使用的类。
public abstract class MyAsyncTask extends AsyncTask<Void, Void, String> {
private final String url;
public MyAsyncTask(String url){
this.url = url;
}
@Override
protected String doInBackground(Void... params){
// get data from url.
return null;
}
}
然后调用它,只需创建该类的实例。
new MyAsyncTask("http://www.google.com"){
public void onPostExecute(String result){
// update your views.
}
}.execute();
答案 1 :(得分:3)
这是一个AsyncTask,它将从URL下载数据并更新调用活动。
确保您的调用活动实现了接口DownloadDataTask.DownloadCompleteHandler
,并将其作为参数传递给DownloadDataTask
构造函数。
public class DownloadDataTask extends AsyncTask<String, Integer, String> {
public interface DownloadCompleteHandler
{
public void handleDownloadComplete(String result);
}
private DownloadCompleteHandler handler;
private String url;
public DownloadDataTask(DownloadCompleteHandler handler, String url) {
this.handler = handler;
this.url = url;
}
/* AsyncTask methods */
@Override
protected String[] doInBackground(String... empty) {
return downloadData(url);
}
@Override
protected void onPostExecute(String result) {
handler.handleDownloadComplete(result);
}
/* Downloading Data */
private String downloadData(String urlStr) {
InputStream is = null;
String result = new String();
try {
is = getInputStream(urlStr);
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result += inputLine;
} catch (MalformedURLException ex) {
return "Malformed URL: " + ex.getMessage();
} catch (SocketTimeoutException ex) {
return "Connection timed out";
} catch (IOException ex) {
return "IOException: " + ex.getMessage();
}
finally {
if (is != null)
is.close();
}
return result;
}
private InputStream getInputStream(String urlStr) throws IOException
{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(7000);
conn.setConnectTimeout(7000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
return conn.getInputStream();
}
}
答案 2 :(得分:2)
你能做的就是为AsyncTask完成创建一个监听器,它在你的AsyncTask完成时监听并返回数据。我创建了一个示例,在后台线程中执行数据库查询,然后将数据返回给Activity。只需check it
,您就可以为您的问题创建类似的AsyncTask。
<强>更新: - 强>