2013-05-06 6 views
8

Я использую Android Android SDK и хочу закрыть свою активность после входа пользователя в систему и получения объекта пользователя. На практике я храню его части, но я хочу закрыть активность независимо.call finish() из статического метода

 // 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 
      } 
     } 
     }); 

сообщение об ошибке, IDE на finish() является: "Cannot make a static reference to the non-static method finish() from the type Activity"

, как поступить?

+1

Попробуйте 'getActivity(). Finish();' если у вас есть контекст, то 'context.getActivity.finish()' – Pragnani

+1

вы пробовали этот http://stackoverflow.com/a/12025698/1218762? –

+0

@Rstar работал как шарм – CQM

ответ

24

Создать ссылку на свою деятельность в OnCreate с

//onCreate 
final Activity activity = this; 

Затем вы можете использовать это в вашем OnCompleted обратного вызова

activity.finish(); 

Вы, возможно, придется сделать Activity activity глобальным.

EDIT 2/26/2014:

Обратите внимание, что вызов finish() из статического метода, вероятно, плохая практика. Вы сообщаете конкретный экземпляр Activity с его собственным жизненным циклом, который должен закрыться от статического метода, без какого-либо жизненного цикла или состояния. В идеале вы бы назвали finish() от чего-то связанного с Activity.

+0

что-то вроде этого сработало! 'static activity activity,' no more errors, мы увидим, что произойдет, компиляция :) – CQM

+0

Я рад, если он работает, пожалуйста, отметьте вопрос как правильный, чтобы это больше не оставалось «без ответа». – bclymer

+0

Да, это сработало по назначению, я, наконец, скомпилировал его, спасибо! – CQM

3

Для некоторых метод 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) {} 
Смежные вопросы