我正在实施一个使用许多方法的应用程序,这些方法需要AsyncTask
一个等待对话框。
实际上我的方法是每次使用扩展AsyncTask的内部类
类似
private class AsyncOperation extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute(){
pDialog = new ProgressDialog(CurrencyConverterActivity.this);
pDialog.setMessage("Waiting...");
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
...
return null
}
protected void onPostExecute(Void params){
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
//dialogs according status the
//int status is a static variable declared in external class
}
});
}
因为使用这种方法我必须编写这个内部类太多次了,这导致脏代码不能很好地读取,我正在寻找更智能的解决方案
有人可以帮助我吗?
答案 0 :(得分:1)
每次使用异步任务时,您是否在呼叫同一网络? 如果是,那么您可以使用一个扩展异步的类并传递每个调用的值。您可以使用响应侦听器从名为async
的方法获取响应这样的事情:
MainActivity:
First method:
AsyncOperation asyncCall = new AsyncOperation(MainActivity.this, "abc", "bcd");
asyncCall.execute();
Second method:
AsyncOperation asyncCall = new AsyncOperation(MainActivity.this, "aaa", "bbb");
asyncCall.execute();
callback(…){
}
Async Class:
private class AsyncOperation extends AsyncTask<Void, Void, Void> {
AsyncOperation(listener, string, string)
{
}
@Override
protected void onPreExecute(){
pDialog = new ProgressDialog(CurrencyConverterActivity.this);
pDialog.setMessage("Waiting...");
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
...
return null
}
protected void onPostExecute(Void params){
pDialog.dismiss();
listener.callback(…);
}
答案 1 :(得分:0)
您可以在单独的文件(而不是内部类)中创建AsyncTask
并重复使用多次。 AsyncTask
不一定是内部阶级。
如果需要,您可能需要修改AsyncTask
以获取其他参数,以使其可重复使用。
您还可以为AsyncTask
创建一个构造函数,其中包含您需要传递给它的值的参数,并使用该构造函数来实例化AsyncTask
。
如果在不同位置使用AsyncTasks的方式相同或至少相似,则此方法有意义。如果在每个AsyncTask中使用完全不同的代码,那么使用单独的AsyncTasks会更好(尽管您仍然可以将它们从内部类中提取到单独的类中)。