Android bekommen Aktivität von innerhalb der anonymen Klasse
Ich bin super neu auf Android-Entwicklung und Java im Allgemeinen. Hier ist das grundlegende setup: ich habe einen splash-screen mit einem AsyncTask
prüfen Sie die Verfügbarkeit des Servers. Folgende diese thread machte ich einen Rückruf in meine Tätigkeit. Das macht mehr Sinn, als die Arbeit in OnPostExecute()
als ich wiederverwenden möchten, diese Aufgabe in andere Aktivitäten.
Jedoch in meiner callback mache ich einen check, wenn der status in Ordnung ist. Wenn es ist, es sollte starten Sie die nächste Aktivität. Aber aus dem Kontext meines Rückruf habe ich nicht bekommen, wie kann ich meine Activity
Referenz, welche ich als parameter für die Absicht.
Dies ist der code in meine Tätigkeit unter 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();
Dem Teil, wo dies nicht gelingt, ist bei getActivity()
. Dieser Aufruf ist nicht verfügbar. Mit this
wirft einen Fehler (was ich verstehe, da bin ich im Kontext der OnTaskCompleted
).
Vollständigkeit halber, dies ist die Schnittstelle für OnTaskCompleted:
public interface OnTaskCompleted<T> {
public void onTaskCompleted(T result);
}
- Und dies ist die CheckServiceTask Klasse:
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);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
CurrentClassName.this
getActivity()
: verwendet mit Fragmentenclass.this
ist nicht das gleiche wiethis
bei geschachtelten Klasse.SplashActivity.this
this
im inneren Klasse bezieht sich auf die anonyme KlasseWenn die Tätigkeit, Die Sie verwenden, Als "
MyActivity
" dann können Sie das folgende tun:Dieses Stück code wird zurückgegeben, der das "aktuelle" Objekt der äußeren Klasse