【问题标题】:call finish() from static method从静态方法调用finish()
【发布时间】:2013-04-30 10:48:32
【问题描述】:

我正在使用 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
          }
        }
      });

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

如何进行?

【问题讨论】:

  • 如果你有上下文,试试getActivity().finish();,然后context.getActivity.finish()
  • 你试过这个stackoverflow.com/a/12025698/1218762 吗?
  • @Rstar 的工作就像一个魅力

标签: android android-activity facebook-android-sdk static


【解决方案1】:

对于某些人来说,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;
        ....
        ....
    }
}

来自您在同一个包中的其他活动,只需 ....

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

【讨论】:

    【解决方案2】:

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

    //onCreate
    final Activity activity = this;
    

    然后你可以在你的 onCompleted 回调中使用它

    activity.finish();
    

    您可能必须将Activity activity 设为全局。

    2014 年 2 月 26 日编辑:

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

    【讨论】:

    • 这样的事情奏效了! static Activity activity; 没有更多错误,我们将看看我编译会发生什么:)
    • 我很高兴,如果它有效,请将问题标记为正确,这样就不再是“未回答”了。
    • 是的,按预期工作,我终于编译了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多