我在我的应用程序中创建了一个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");
}
});
答案 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")