2

我有 2 个课程:checkenrol.java 和 allcourses.java

checkenrol 扩展了 AsyncTask。我在 checkenrol 中还有一个名为“alreadyEnrolled”的全局布尔值。

allcourses 将使用 2 个参数执行 checkenrol。

这个想法是:

  • allcourses 将加载课程列表。
  • 用户将点击一门课程,它会在后台运行 checkenrol 课程。如果用户已经注册,则全局布尔值“alreadyEnrolled”将设置为 true,否则为 false。
  • allcourses 现在将输出用户是否已经注册取决于布尔值

我的问题是 Asynctask 的执行和布尔值的比较是同时完成的。

为了进一步说明这里是我的代码片段:

这是我的 checkenrol.java

public class checkenrol extends AsyncTask <String, Void, String> {
    public static boolean alreadyEnrolled = false;
    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        ...

        if (res.equals("1")) {
            alreadyEnrolled = true;
        }
        else {
            alreadyEnrolled = false;
        }
        ...
    } ...

这是我的 allcourses.java

 checkenrol ce = new checkenrol();
        ce.execute(param1, param2); 

        if (checkenrol.alreadyEnrolled == true) {
            //redirect to subject's home
            System.out.println("Already Enrolled");
        }
        else if (checkenrol.alreadyEnrolled == false){
            System.out.println("Not yet enrolled");
        }

当我点击我已经注册的项目时,它会输出“尚未注册”,但我第二次点击它时,它会输出“已经注册”。

对不起,很长的帖子。希望你能帮助我:)

4

2 回答 2

0

您应该在扩展中使用onPreExecute()方法AsyncTaskclass

编辑:

public class checkenrol extends AsyncTask <String, Void, String> { 
 @Override
    protected String doInBackground(String... params) {
}

 @Override
    protected String onPreExecute() {
//Before starting doInBackground() 
//Will run in main thread

}
 @Override
    protected String onPostExecute() {
//After completing doInBackground() 
//Will run in main thread
}
}
于 2012-11-30T11:10:44.290 回答
0

将您要比较的内容放在执行后..这通常会在后台任务结束后执行...

公共类 checkenrol 扩展 AsyncTask {

public static boolean alreadyEnrolled = false;

protected String doInBackground(String... params) {

    if (res.equals("1")) {
        alreadyEnrolled = true;
    }
    else {
        alreadyEnrolled = false;
    }

返回已经注册;

}

受保护的字符串 onPostExecute(字符串 r){

checkenrol ce = 新的 checkenrol(); ce.execute(param1, param2);

    if (checkenrol.alreadyEnrolled == true) {
        //redirect to subject's home
        System.out.println("Already Enrolled");
    }
    else if (checkenrol.alreadyEnrolled == false){
        System.out.println("Not yet enrolled");
    }

}

} 
于 2012-11-30T11:25:54.993 回答