从静态方法调用finish()

CQM*_*CQM 13 static android facebook-android-sdk android-activity

我正在使用Facebook Android SDK,并希望在用户登录并获取用户对象后关闭我的Activity.在实践中,我正在存储它的一部分,但我想关闭活动,无论如何.

      // 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
          }
        }
      });
Run Code Online (Sandbox Code Playgroud)

IDE错误消息finish()是:"Cannot make a static reference to the non-static method finish() from the type Activity"

如何进行?

bcl*_*mer 29

在onCreate中创建对您的活动的引用

//onCreate
final Activity activity = this;
Run Code Online (Sandbox Code Playgroud)

然后,您可以在onCompleted回调中使用它

activity.finish();
Run Code Online (Sandbox Code Playgroud)

你可能必须做Activity activity全球化.

编辑2/26/2014:

请注意,finish()从静态方法调用可能是不好的做法.你正在告诉一个Activity具有它自己的生命周期的特定实例,它应该从静态方法关闭自己,没有任何生命周期或状态.理想情况下,你会finish()从具有绑定功能的东西中调用Activity.


sam*_*yte 6

对于某些人来说,bclymer 的方法可能不起作用。我的没有,使用最新的测试版 Android Studio...试试这个...

public class myActivity extends Activity {

    public static Activity activity = null;
    ...
    ...

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myActivity_layout);

        activity = this;
        ....
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

从同一包中的其他活动中,只需......

    // use try catch to avoid errors/warning that may affect the 
    // next method execution
    try {
         myActivity.activity.finish();
    } catch (Exception ignored) {}
Run Code Online (Sandbox Code Playgroud)