非同期クラスがAndroidで実行される前にUIスレッドが実行されます

アチューサンM

Androidフォームのフィールドの検証を行っています。サーバーでユーザー名が使用可能かどうかをサーバーに確認していますが、非同期チェックが完了する前にメインスレッドが次のページに移動します。

コード:

btnnext1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

        isallValid=true;
        //check second time for username validation(first time was in onfocus changed)

//      if(txtusername.getText().toString().trim().equals("achuthan")){
//          txtusername.setError("Username exsists!");
//          isUsernameValid=false;
//        }
//      
//        else
//        {
//          isUsernameValid=true;
//        }

        try {
            Void async_result=new validateusername().execute().get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

                if(txtfullname.getText().toString().trim().length()==0)
            {
            txtfullname.requestFocus();
            txtfullname.setError("Field required");
            isallValid=false;

            }
        if(txtdob.getText().toString().trim().length()==0)
        {
            txtdob.requestFocus();
            txtdob.setError("Field required");
            isallValid=false;
        }
        if(txtoccupation.getText().toString().trim().length()==0)
        {
            txtoccupation.requestFocus();
            txtoccupation.setError("Field required");
            isallValid=false;
        }
         if(txtusername.getText().toString().trim().length()<6){
            txtusername.requestFocus();
            txtusername.setError("Minimum length of 6 characters");
            isallValid=false;
        }
        if(txtpassword.getText().toString().trim().length()==0)
        {
            txtpassword.requestFocus();
            txtpassword.setError("Field required");
            isallValid=false;
        }
        if(txtconfirmpassword.getText().toString().trim().length()==0)
        {
            txtconfirmpassword.requestFocus();
            txtconfirmpassword.setError("Field required");
            isallValid=false;
        }
        else if(!txtpassword.getText().toString().trim().equals(txtconfirmpassword.getText().toString().trim()))
        {
            //txtconfirmpassword.requestFocus();
            txtconfirmpassword.setError("Passwords not equal");
            txtpassword.setError("Passwords not equal");
            isallValid=false;
        }


         if(isallValid&&isUsernameValid)
        {
            //Toast.makeText(getActivity(),"VALID FORM!!",Toast.LENGTH_LONG).show();
            ((SignUpPage)getActivity()).getValues().fullname=txtfullname.getText().toString().trim();
            ((SignUpPage)getActivity()).getValues().dob=txtdob.getText().toString().trim();


            int id=radiogender.getCheckedRadioButtonId();
            RadioButton rb=(RadioButton) view.findViewById(id);
            String gender=rb.getText().toString();
            ((SignUpPage)getActivity()).getValues().gender=gender;


            int id1=radiomarital.getCheckedRadioButtonId();
            RadioButton rb1=(RadioButton) view.findViewById(id1);
            String marital_status=rb1.getText().toString();
            ((SignUpPage)getActivity()).getValues().marital_status=marital_status;



            ((SignUpPage)getActivity()).getValues().occupation=txtoccupation.getText().toString().trim();
            ((SignUpPage)getActivity()).getValues().username=txtusername.getText().toString().trim();
            ((SignUpPage)getActivity()).getValues().password=txtpassword.getText().toString().trim();



            ((SignUpPage)getActivity()).selectFragment(1);


        }
                    //if all valid , store values and go to next fragment
                    //((SignUpPage)getActivity()).selectFragment(1);
            }
        });



        return view;
    }

非同期クラス:

public class validateusername extends AsyncTask<String,Void,Void>
        {

            @Override
            protected Void doInBackground(String... arg0) {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(URL);
                List<NameValuePair> pairs = new ArrayList<NameValuePair>();
                pairs.add(new BasicNameValuePair("username",txtusername.getText().toString().trim()));
                try {
                    httppost.setEntity(new UrlEncodedFormEntity(pairs));
                    response = httpclient.execute(httppost);
                    result=responsetostring.getResponseBody(response);
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }




                return null;
            }
            @Override
            protected void onPostExecute(Void result1) {
                try {
                    jsonobj=new JSONObject(result);
                    job2=jsonobj.getJSONObject("server_message");
                } catch (JSONException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                 try {
                    finalresult=job2.getString("username_availability_message");
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if(finalresult.equals("exist")){
                    txtusername.setError("Username exsists!");
                    isUsernameValid=false;
                }
                else if(finalresult.equals("available"))
                {

                    isUsernameValid=true;
                }
            }

        }

getメソッドを使用して、メインスレッドが非同期クラスが終了するまで待機するようにしましたが、機能しませんでした。助けてください!!

カーシックポップ

ボタンクリックでのみisallValidをチェックし、onPostExecute(Void result)メソッド内でこの検証を実行します

  if(isUsernameValid)
    {
        //Toast.makeText(getActivity(),"VALID FORM!!",Toast.LENGTH_LONG).show();
        ((SignUpPage)getActivity()).getValues().fullname=txtfullname.getText().toString().trim();
        ((SignUpPage)getActivity()).getValues().dob=txtdob.getText().toString().trim();


        int id=radiogender.getCheckedRadioButtonId();
        RadioButton rb=(RadioButton) view.findViewById(id);
        String gender=rb.getText().toString();
        ((SignUpPage)getActivity()).getValues().gender=gender;


        int id1=radiomarital.getCheckedRadioButtonId();
        RadioButton rb1=(RadioButton) view.findViewById(id1);
        String marital_status=rb1.getText().toString();
        ((SignUpPage)getActivity()).getValues().marital_status=marital_status;



        ((SignUpPage)getActivity()).getValues().occupation=txtoccupation.getText().toString().trim();
        ((SignUpPage)getActivity()).getValues().username=txtusername.getText().toString().trim();
        ((SignUpPage)getActivity()).getValues().password=txtpassword.getText().toString().trim();



        ((SignUpPage)getActivity()).selectFragment(1);


    }

今それは動作します................。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

どのスレッド非同期操作が実行されるか

分類Dev

UIを更新する非同期メソッドが部分的に実行されます

分類Dev

非同期タスクがバックグラウンドで実行されていませんか?

分類Dev

非同期タスクがバックグラウンドで実行されていませんか?

分類Dev

1つの@Asyncメソッドで使用されるスレッドプールが他の非同期メソッドの実行と共有されます

分類Dev

Android:UI操作がUIスレッドで実行されるようにするためのベストプラクティス

分類Dev

「非同期」は別のスレッドで実行されますか?

分類Dev

タスクが非同期で実行されている間にオブジェクトを破棄します

分類Dev

どのコードが実際に非同期/待機パターンで「マルチスレッド」で実行されますか?

分類Dev

小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

分類Dev

Mainクラスで指定されたメソッドの前にメソッドが実行される初期化

分類Dev

GreenDAO:ToManyリレーションにより、SQLiteクエリがUIスレッドで実行されます

分類Dev

.Netネイティブのスレッドプールで実行される非同期タスクのパフォーマンスが非常に低い

分類Dev

非同期コードがC#のワーカースレッドで実行される理由

分類Dev

タスクがAndroidの別のスレッドで実行されている間にUIを更新するにはどうすればよいですか?

分類Dev

Android:定期的に実行されUIタスクを実行するバックグラウンドスレッドを作成しますか?

分類Dev

同期スレッドメソッドが同時に実行されています-なぜですか?

分類Dev

実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

分類Dev

非同期待機タスクの実行中にウィジェットがフラッター表示される

分類Dev

スレッドがスリープする前にコードが実行されていませんか?

分類Dev

C#スレッド/非同期:UIが対話可能である間にバックグラウンドでタスクを実行する

分類Dev

プロセスの実行中にプログレスバーがUIで非同期に更新されない

分類Dev

AndroidはすぐにUIスレッドで実行されます

分類Dev

別のブロックを開始する前に、2つの非同期ブロックが実行されるまで待機します

分類Dev

Android-サービスを開始する前にスレッドが実行されるのを待つ

分類Dev

動的に作成されたクラスメソッドは、実行時に「作成された」名前を知ることができますか?

分類Dev

メインスレッドで実行されているFlutter非同期

分類Dev

呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

分類Dev

Laravelディスパッチジョブが非同期で実行されず、実行が妨げられる

Related 関連記事

  1. 1

    どのスレッド非同期操作が実行されるか

  2. 2

    UIを更新する非同期メソッドが部分的に実行されます

  3. 3

    非同期タスクがバックグラウンドで実行されていませんか?

  4. 4

    非同期タスクがバックグラウンドで実行されていませんか?

  5. 5

    1つの@Asyncメソッドで使用されるスレッドプールが他の非同期メソッドの実行と共有されます

  6. 6

    Android:UI操作がUIスレッドで実行されるようにするためのベストプラクティス

  7. 7

    「非同期」は別のスレッドで実行されますか?

  8. 8

    タスクが非同期で実行されている間にオブジェクトを破棄します

  9. 9

    どのコードが実際に非同期/待機パターンで「マルチスレッド」で実行されますか?

  10. 10

    小さな非同期タスクがフォアグラウンドを更新できるようにしながら、長時間実行される並列タスクをバックグラウンドで実行する

  11. 11

    Mainクラスで指定されたメソッドの前にメソッドが実行される初期化

  12. 12

    GreenDAO:ToManyリレーションにより、SQLiteクエリがUIスレッドで実行されます

  13. 13

    .Netネイティブのスレッドプールで実行される非同期タスクのパフォーマンスが非常に低い

  14. 14

    非同期コードがC#のワーカースレッドで実行される理由

  15. 15

    タスクがAndroidの別のスレッドで実行されている間にUIを更新するにはどうすればよいですか?

  16. 16

    Android:定期的に実行されUIタスクを実行するバックグラウンドスレッドを作成しますか?

  17. 17

    同期スレッドメソッドが同時に実行されています-なぜですか?

  18. 18

    実装するインターフェースが非同期の場合、「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告を抑制するにはどうすればよいですか?

  19. 19

    非同期待機タスクの実行中にウィジェットがフラッター表示される

  20. 20

    スレッドがスリープする前にコードが実行されていませんか?

  21. 21

    C#スレッド/非同期:UIが対話可能である間にバックグラウンドでタスクを実行する

  22. 22

    プロセスの実行中にプログレスバーがUIで非同期に更新されない

  23. 23

    AndroidはすぐにUIスレッドで実行されます

  24. 24

    別のブロックを開始する前に、2つの非同期ブロックが実行されるまで待機します

  25. 25

    Android-サービスを開始する前にスレッドが実行されるのを待つ

  26. 26

    動的に作成されたクラスメソッドは、実行時に「作成された」名前を知ることができますか?

  27. 27

    メインスレッドで実行されているFlutter非同期

  28. 28

    呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

  29. 29

    Laravelディスパッチジョブが非同期で実行されず、実行が妨げられる

ホットタグ

アーカイブ