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);
    }
}
InformationsquelleAutor Coo | 2015-08-09
Schreibe einen Kommentar