2015-06-30 2 views
0

Я пытаюсь понять AsyncTask в Android. Я не понимаю, как мы передаем параметры. В этом коде:Параметры AsyncTask в Android

protected class AsyncLogin extends AsyncTask<String, JSONObject, Boolean> { 
     String userName = null; 

     @Override 
     protected Boolean doInBackground(String... params) 
     { 
      RestAPI api = new RestAPI(); 
      boolean userAuth = false; 
      try 
      { 
       JSONObject jsonObj = api.UserAuthentication(params[0], params[1]); 
       JSONParser parser = new JSONParser(); 
       userAuth = parser.parseUserAuth(jsonObj); 
       userName = params[0]; 

      } 
      catch (Exception e) 
      { 
       Log.d("AsyncLogin", e.getMessage()); 
      } 

      return userAuth; 
     } 

     @Override 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 
      Toast.makeText(context, "Please wait...", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     protected void onPostExecute(Boolean result) 
     { 
      if(result) { 
       Intent i = new Intent(LoginActivity.this, UserDetailsActivity.class); 
       i.putExtra("username", userName); 
       startActivity(i); 
      } 
      else 
      { 
       Toast.makeText(context, "Not valid username/password", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

Я не могу понять, почему мы используем <String, JSONObject, Boolean> в

protected class AsyncLogin extends AsyncTask<String, JSONObject, Boolean> 

Что String, Boolean и JSONObject см? Вы можете мне это объяснить? Благодарю.

+0

http://developer.android.com/reference/android/os/AsyncTask.html – moffeltje

ответ

1

AsyncTask (Type1, Type2, Type3) используют типы аргументов:

  • Type1 является типом аргумент, который вы передаете, когда вы звоните execute (получено в doInBackground)
  • Тип2 - тип аргумента, который вы передаете onProgressUpdate, когда вы позвоните publishProgress.
  • Тип3 - это тип аргумента, который вы передаете onPostExecute, и это то, что вы возвращаете с doInBackground.
1

Реализация задачи Asynch позволяет использовать один параметр типа в качестве аргумента. Но вы можете передать ему больше параметров типа, объявив ему один параметризованный конструктор. , например.

class YourAsynchTask extends AsyncTask<ArgumentObject, ProgressObject, ResultObject> { 

...... 

ObjectType1 argument1; 
ObjectType2 argument2; 
ObjectType3 argument3; 

YourAsynchTask(ObjectType1 arg1, ObjectType2 arg2, ObjectType3 arg3) { 
argument1 = arg1; 
argument2 = arg2; 
argument3 = arg3; 
    } 


    // rest of the method of your asynch task like doInBackground, etc. 
} 

Вы можете назвать этот тип асинхронной задачи, как это:

new YourAsynchTask(arg1, arg2, arg3).execute(argumentObjet); 
Смежные вопросы