为什么我不能在Android中的onClick()中使用this.getApplication()?

时间:2017-04-05 15:47:47

标签: android

我正在尝试检查在执行一大块代码之前是否在我的主活动类中设置了会话ID。我有一个SessionID类来存储id(如果有的话)。我试图通过使用以下内容在an onClick()中访问它:

if ( ((SessionID) this.getApplication()).getSessionID() != null ) {}

但是,它会出现错误“无法解析方法'getApplication()'”

此行几乎可用于我的主要活动中的任何其他位置。我试着查看活动如何运作的细节,但我没有发现任何与此相关的内容。

问题:onClick()有什么不同,我无法致电this.Application()

这是我正在使用的onClick()

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            // Calls downloadPDF to download PDF in background thread

            if ( ((SessionID) this.getApplication()).getSessionID() != null) {

                new downloadPDF().execute("http://10.0.2.2/DBConnector/public_html/mobilePDFNew.php");
            }

2 个答案:

答案 0 :(得分:3)

如果您使用的是onClickListener,那么您将创建一个内部类的实例。 this的范围在此更改,不再涉及您的活动/片段上下文。

假设您参加了某项活动,请改用MyActivity.this

答案 1 :(得分:1)

getApplication()Activity类的方法。因此,如果您的Activity

中有这样的代码
view.setOnClickListener(new OnClickListener(){
    public void onClick(View view){
         if ( ((SessionID) this.getApplication()).getSessionID() != null ) {}
    }
})

在这种情况下this引用OnClickListener的一个实例。相反,您应该使用%ActivityName%.this.getApplication()