Один из вариантов - создать интерфейс и использовать его как обратный вызов.В классе асинхронных задач:
public class NetworkCall extends AsyncTask<Call, Void, List<Student>> {
public interface NetworkCallback{
void onResponse(List<Students> students);
}
private NetworkCallback callback;
public void setCallback(NetworkCallback callback){
this.callback = callback;
}
@Override
protected List<Students> doInBackground(Call... calls) {
try {
Call<Students> call = calls[0];
Response<Students> response = call.execute();
return response.body().getStudents();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(List<Students> students) {
callback.onResponse(students)
}
}
и теперь в вашей деятельности реализуйте интерфейс и предоставьте асинхронную задачу через установщик.
public class StudentsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//.... you setup for activity
NetworkCall networkCall = new NetworkCall();
networkCall.setCallback(new NetworkCall.NetworkCallback() {
@Override
public void onResponse(List<Students> students) {
//update your UI here
}
});
}
}
На основе Документов onPostExecute
работает в основном потоке пользовательского интерфейса, поэтому нет необходимости в runOnUiThread
и Runnable