无法解析方法getApplication()

时间:2017-11-27 12:23:08

标签: android

我在我的应用程序中创建了一个Android全局变量,当我尝试使用getApplication在我的活动中访问它时,我得到错误:

  

无法解析方法getApplication()

扩展应用程序的类中的代码:

    package com.example.user.app;

    import android.app.Application;


    public class answer extends Application {

           private String answer1;

            public String getSomeVariable() {
                 return answer1;
              }

            public void setanswer1(String one) {
                this.answer1 = one;
                }
        }

我在活动中的代码:

       package com.example.user.pilz_app;

       import android.content.Intent;
       import android.support.design.widget.FloatingActionButton;
       import android.support.design.widget.Snackbar;
       import android.support.v7.app.AppCompatActivity;
       import android.os.Bundle;
       import android.support.v7.widget.Toolbar;
       import android.view.View;
       import android.widget.ImageButton;

       public class QuestionOne extends AppCompatActivity {

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

            ImageButton half = findViewById(R.id.half);
            half.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            Intent intent = new Intent(QuestionOne.this, QuestionTwo.class);
            startActivity(intent);
           ((answer) this.getApplication()).setanswer1("half");
           }

       });

3 个答案:

答案 0 :(得分:2)

您使用的是匿名类引用 this

   half.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(QuestionOne.this, QuestionTwo.class);
                startActivity(intent);
                ((answer) this.getApplication()).setanswer1("half");
            }

此时请参阅this,指向OnClickListener引用,而不是您的活动。所以你可以做的是使用完全限定的参考,如下所示。

QuestionOne.this.getApplication().setanswer1("half");

答案 1 :(得分:0)

在你的Android清单中,你必须声明实现android.app.Application的类(将android:name =“。answer”属性添加到现有的应用程序标记中):

    <application 
       android:name=".answer" 
       android:icon="@drawable/youricon" 
       android:label="@string/app_name">

但是,为什么不使用单例类来存储全局变量?使用应用程序可能会导致问题 - &gt; http://www.developerphil.com/dont-store-data-in-the-application-object/

答案 2 :(得分:0)

当您在this中使用View.OnClickListener时,它指向无法解析View方法的getApplication(),因为它属于android Activity。 所以你应该替换((answer) this.getApplication()).setanswer1("half")

((answer) getApplication()).setanswer1("half") //since you were using getApplication() in Activity it is not necessary to specify 'this' keyword here

((answer) QuestionOne.this.getApplication()).setanswer1("half")