Android получает активность из анонимного класса

Я супер новичок в разработке Android и Java в целом. Вот базовая настройка: у меня есть заставку с AsyncTask для проверки доступности сервера. После этой темы я сделал обратный вызов в своей деятельности. Это имеет большее значение, чем выполнение работы в OnPostExecute() поскольку я хочу повторно использовать эту задачу в разных действиях.

Однако в моем обратном вызове я делаю чек, если статус в порядке. Если это так, он должен запустить следующую операцию. Но из контекста моего обратного вызова я не понимаю, как я могу получить ссылку на Activity , которая мне нужна в качестве параметра для Intent.

Это код в моей деятельности в OnCreate:

  //Check server status CheckServiceTask t = new CheckServiceTask(new OnTaskCompleted<ShaggyServiceStatus>() { @Override public void onTaskCompleted(ShaggyServiceStatus result) { Log.i(TAG, "Callback. Result: " + result.getStatus()); ProgressBar pb = (ProgressBar) findViewById(R.id.splash_progress); pb.setVisibility(View.INVISIBLE); if (result.getStatusCode() == 999){ TextView t = (TextView) findViewById(R.id.splash_status_text); t.setText(result.getStatus()); return; } Intent i = new Intent(getActivity(), LoginActivity.class); startActivity(i); finish(); } }); t.execute(); 

Часть, где это не удается, находится в getActivity() . Этот вызов недоступен. Используя this выдается ошибка (которую я понимаю, поскольку я в контексте OnTaskCompleted ).

Для полноты, это интерфейс для OnTaskCompleted:

 public interface OnTaskCompleted<T> { public void onTaskCompleted(T result); } 

И это класс CheckServiceTask:

 public class CheckServiceTask extends AsyncTask<Void, Void, ShaggyServiceStatus>{ private static final String TAG = "coo"; public OnTaskCompleted<ShaggyServiceStatus> listener; public CheckServiceTask (OnTaskCompleted<ShaggyServiceStatus> l){ this.listener = l; } @Override protected ShaggyServiceStatus doInBackground(Void... params) { try { Log.i(TAG, "Connecting to server..."); //TODO: Make this a setting final String url = "https://someplace.com/status"; RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); //restTemplate.postForObject("url", bodyObject, ShaggySer.class); ShaggyServiceStatus sss = restTemplate.getForObject(url, ShaggyServiceStatus.class); Log.d(TAG, "Got the status."); return sss; } catch (Exception e) { //TODO: Exception handling Log.e(TAG, e.getMessage(), e); } //If we're here, it's not okay. ShaggyServiceStatus r = new ShaggyServiceStatus("Cannot connect to server", 999, "none"); return r; } @Override protected void onPostExecute(ShaggyServiceStatus result) { super.onPostExecute(result); listener.onTaskCompleted(result); } } 

Использовать CurrentClassName.this

 Intent i = new Intent(CurrentClassName.this, LoginActivity.class); 

getActivity() : используется с фрагментами

Вернуть активность, с которой связан этот фрагмент.

class.this это не то же самое, что и при вложенном классе.

Если действие, которое вы используете, называется « MyActivity », вы можете сделать следующее:

 MyActivity.this 

Этот кусок кода вернет этот «текущий» объект внешнего класса