添加 Listener 后不执行 AsyncTask 循环

AsyncTask loop not executed after adding Listener

我正在尝试从我的 public class saveData extends AsyncTask 中获得响应。

为此我添加了一个 public interface OnTaskCompleted()。但是 for 循环没有被执行,它直接从 for 行到 return 并且 onPostExecute() 永远不会被执行.如果我删除接口,它会正常工作。

我的Activity:

public class almostFinish extends Activity{

@Override 
protected void onCreate(Bundle savedInstanceState) {
}

private void InvoiceSave(){
SaveMyData savedata = new SaveMyData(new OnTaskCompleted() {
                        @Override
                        public void onTaskCompleted(boolean isSuccess) {
                            if(isSuccess){
                                //do something
                            }
                            else {
                                showMyAlert("Error Saving Invoice!");
                            }

                        }
                    });
                    List<String> myList = new ArrayList<>();
                    ...
                    savedata.execute(myList);
 }

我的界面。

public interface OnTaskCompleted {
void onTaskCompleted(boolean isSuccess);
}

我的异步任务class

public class SaveMyData extends AsyncTask<List<String>, Void, Void> {
    private OnTaskCompleted listener;
    boolean myflag = false;

 public SaveMyData (OnTaskCompleted listener){
    this.listener=listener;
}

 @Override
public void onPreExecute() {
    // TODO Auto-generated method stub
}

@Override
protected Void doInBackground(List<String>... params) {
      for (int i = 1; i == 5; i++) {
      }
 return null;
}

 @Override
public void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);

        listener.onTaskCompleted(myflag);

}
}

感谢您的帮助。

你设置的循环条件有误。不应该是for (int i = 1; i <= 5; i++)吗??

如@Mr Neo 所说,构造函数和 class 名称应该相同,例如:

public class saveData extends AsyncTask<List<String>, Void, Void> {
    private OnTaskCompleted listener;
    boolean myflag = false;

public saveData(OnTaskCompleted listener){
    this.listener=listener;
}

另外,class 名称应以大写字母开头,如 "SaveData",非静态成员声明名称应以非大写字母开头,如 "saveData",例如:

SaveData saveData = new SaveData(someParams);
saveData.execute(otherSomeParams);

良好的编码方式造就了优秀的开发人员啊哈。