添加Listener后不执行AsyncTask循环

时间:2015-09-08 02:17:21

标签: android android-asynctask listener

我试图从我的公共类中获取响应saveData扩展了AsyncTask。

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

我的活动:

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);
}

我的AsyncTask类

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);

}
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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

其他方面,类名应该以大写字母开头,例如&#34; SaveData&#34;,非静态成员声明名称应该以非大写字母开头,例如&#34; saveData& #34;,例如:

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

良好的编码方式使一个好的开发人员aha。