call finish() from static method

CQM picture CQM · May 6, 2013 · Viewed 14.3k times · Source

I am using the Facebook Android SDK and want to close my Activity after a user logs in and gets the user object. In practice I am storing parts of it but I want to close the activity regardless.

      // make request to the /me API
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

        // callback after Graph API response with user object
        @Override
        public void onCompleted(GraphUser user, Response response) {
          if (user != null) {
           finish(); // causes errors
          }
        }
      });

The IDE error message on finish() is: "Cannot make a static reference to the non-static method finish() from the type Activity"

how to proceed?

Answer

bclymer picture bclymer · May 6, 2013

Create a reference to your activity in onCreate with

//onCreate
final Activity activity = this;

Then you can use that in your onCompleted callback

activity.finish();

You might have to make Activity activity global.

EDIT 2/26/2014:

Note that calling finish() from a static method is probably bad practice. You are telling a specific instance of an Activity with it's own lifecycle that it should shut itself down from a static method, something without any lifecycle or state. Ideally you'd call finish() from something with a binding to the Activity.