从静态方法调用finish()

我正在使用Facebook的Android SDK,并希望closures我的活动后,用户login并获取用户对象。 在实践中,我正在存储它的一部分,但是我想closures活动。

// 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"

如何进行?

Solutions Collecting From Web of "从静态方法调用finish()"

用onCreate创build一个对你的活动的引用

 //onCreate final Activity activity = this; 

然后你可以在你的onCompletedcallback中使用它

 activity.finish(); 

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

编辑2/26/2014:

请注意,从静态方法调用finish()可能是不好的做法。 你正在告诉一个具有自己生命周期的Activity的特定实例,它应该从静态方法中closures它,没有任何生命周期或状态。 理想情况下,您可以通过绑定到Activity来调用finish()

对于某些人来说,bclymer的方法可能行不通。 它没有在我的,使用最新的testing版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) {}