2016-05-22 4 views
0

これは正常に機能していますが、編集テキストが空であるかどうかを確認するには、onPreExecute()をチェックします。この行close();が間違っています。サーバーに接続する前に、テキストを編集する必要はありません。私は空のエディットテキストが、それはdoInBackgroundでアクセスされることはありませんfinal AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(LoginActivity.this);を埋めるためにユーザーに伝えるためにonPreExecute()に警告ダイアログを追加したいonpreexecuteでnullをチェックしている間にasyncataskを停止する方法

私の他の問題は、画像は、そのが使用されていないことを示すがalertdialogbuilderdoinbackgroundどのように存在しています彼らもそこにアクセスできるようにするには? enter image description here

class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected void onPreExecute() 
     { 
      name = usernam.getText().toString(); 
      pass = passw.getText().toString(); 
      //emails = email.getText().toString(); 
     if (name = null || pass =null) 
      close(); // i guess this is wrong i want to stop the asynctask 
      Log.e("GetText","called"); 

     } 
     @Override 
     protected String doInBackground(String... params) { 
      //doing connections to the server 


         }else{ 
         final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(LoginActivity.this); 
         alertDialogBuilder.setMessage("Wrong username or password, Try again please."); 
         alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface arg0, int arg1) { 
           // Toast.makeText(MainActivity.this,"You clicked yes button",Toast.LENGTH_LONG).show(); 
           Intent i = new Intent(LoginActivity.this, LoginActivity.class); 
           startActivity(i); 
          } 
         }); 
+1

なぜあなたは単に' EditText'sをチェックしませんか?また、 'getText()。toString()'は 'null'を返しません。あなたはそれが空であることをチェックしたいと思う。 –

+0

onPreExecuteにフラグを設定し、doInBackgroundでこのフラグをチェックします。flatがfalseに設定されている場合は、doInBackgroundからnullを返します。 '@Override保護ボイドonPreExecute(){ progressDialog.show()。 } @Override保護ボイドonCancelled(){ ランニング= FALSE; } @OverrideボイドdoInBackground(ボイド...のparams){ 一方(ランニング){// ハードワーク し}戻りヌルを保護。 } ' – Rafal

+0

@MikeM。いくつかの例では、 'onPreExecute()'を使ってEditsテキストを定義しています。空であるかどうかをチェックする方法は? – Moudiz

答えて

1

あなたがそれらをテストしているところ(彼らは空の文字列かもしれませんが)まず、namepassがnullになることはありません。

一度開始したAsyncTaskを停止できません - タスクを実行しない場合は、のフィールドを確認してから、の前にAsyncTaskを開始してください。あなたはonPreExecute内のテストを実行する必要がある場合は、ちょうどあなたがそれが何かをしたくない場合はdoInBackground()から返すようにフィールドを設定します。

最後に、あなたは)(onPostExecuteでAlertDialogを表示する必要があります。このような

何かが良いだろう。

void checkCredentials() { 
    String name = usernam.getText().toString(); 
    String pass = passw.getText().toString(); 
      //emails = email.getText().toString(); 
    if (name.equals("") || pass.equals("")) 
     showWrongCredentials(); 
    else 
     new SendPostReqAsyncTask().execute(name,pass); 
} 

void showWrongCredentials() { 
    AlertDialog.Builder(this)....show(); 
} 

class SendPostReqAsyncTask extends AsyncTask<String, Void, Boolean> { 
     @Override 
     protected Boolean doInBackground(String... params) { 
      String name = params[0]; 
      String pass = params[1]; 
      //doing connections to the server 
      ... 
      // return true/false; 
     } 

     @Override 
     protected void onPostExecute(Boolean ok) { 
      if (!ok) 
      showWrongCredentials(); 
     } 
} 
1

あなたが実行onPreExecuteをcancel()とdoInBackgroundにキャンセルかどうかを確認することができます。あなたは `AsyncTask`を実行する前に

関連する問題