2

checkenrol.java と allcourses.java の 2 つのクラスがあります。

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

既に登録している項目をクリックすると「未登録」と表示されますが、2 回目は「登録済み」と表示されます。

長い投稿で申し訳ありません。あなたが私を助けてくれることを願っています:)

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

比較するものを実行後に置きます..これは通常、バックグラウンドタスクが終了した後に実行されます...

public class checkenrol extends 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 に答える