Il est utilisé lorsque vous souhaitez faire quelque chose une fois le traitement d'AsyncTask terminé.
MainActivity
public class MainActivity extends AppCompatActivity{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv);
AsyncCallBack asyncCallBack = new AsyncCallBack();
MyAsyncTask myAsyncTask = new MyAsyncTask(asyncCallBack);
myAsyncTask.execute();
}
public class AsyncCallBack{
public void callBack(String s){
//Décrivez le processus que vous souhaitez effectuer après la fin d'AsyncTask
tv.setText(s);
}
}
}
MyAsyncTask
public class MyAsyncTask extends AsyncTask<Void,Void,String> {
private MainActivity.AsyncCallBack callBack = null;
public MyAsyncTask(MainActivity.AsyncCallBack callBack){
this.callBack = callBack;
}
@Override
protected String doInBackground(Void... aVoid) {
return "success";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
callBack.callBack(s);
}
}
Il serait très difficile d'écrire du code AsyncTask à chaque fois qu'une communication asynchrone est effectuée.
De l'appelant
AsyncCallBack callBack = new AsyncCallBack();
AsyncTask asyncTask = new AsyncTask(callback);
Je veux pouvoir l'appeler de n'importe où.
Avec la méthode "Call Back for asynchronous communication" ci-dessus, dans le constructeur d'AsyncTask
J'ai reçu un argument avec \ <MainActivity.AsyncCallBack asyncCallBack>, mais je ne peux pas généraliser avec cela.
Donc, en utilisant Interface pour pouvoir déclarer le type AsyncCallBack
Généraliser pour que les arguments puissent être reçus avec \
J'utiliserai également HashMap pour rendre les paramètres portables.
Puis l'interface!
CallBack.interface
interface CallBack{
public void Receiver(Map<String,String> map);
}
Vous pouvez maintenant utiliser des arguments de type CallBack!
AsyncTaskSample.java
public class AsyncTaskSample extends AsyncTask<Map<String,String>,Void,Map<String,String>{
AsyncTaskCallBack callback;
public AsyncTaskSample(AsyncTaskCallBack callBack){
this.callback = callBack;
}
@Override
protected Map<String,String> doInBackground(Map<String,String>... map){
return map[0];
}
@Override
protected void onPostExecute(Map<String,String> map){
super.onPostExecute(map);
callback.Receiver(map);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements CallBack{ //Prolonger le rappel
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AsyncTaskSample async = new AsyncTaskSample(this);
Map<String,String> map = new HashMap<String,String>();
map.put("key","MainActivity");
async.execute(map);
new SampleClass.SampleClass();
}
@Override
public void Receiver(Map<String,String> map) {
Log.d("=====>",map.get("key");
}
SampleClass.java
public class SampleClass implemants CallBack{ //Prolonger le rappel
void SampleClass(){
AsyncTaskSample async = new AsyncTaskSample(this);
Map<String,String> map = new HashMap<String,String>();
map.put("key","SampleClass");
async.execute(map);
}
@Override
public void Receiver(Map<String,String> map){
Log.d("=====>",map.get("key");
}
}
Recommended Posts