我使用Application访问我的数据。 虽然可以点击,但我想使用Application中的数据。 我使用下面的代码:
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyData md = (MyData)this.getApplication();
md.setName("");
md.setIP("");
}
});
但错误显示:
The method getApplication() is undefined for the type new View.OnClickListener(){}
如何在onClick方法中使用getApplication?
答案 0 :(得分:4)
通过getApplication(),我假设您指的是Activity.getApplication()
在这种情况下,如果您删除this
它应该工作。
MyData md = (MyData)getApplication();
答案 1 :(得分:2)
你可以这么做,
设置名称 -
((MyApplication)getApplication()).setName("StackOverflow");
获取名称 -
((MyApplication)getApplication()).getName();
答案 2 :(得分:1)
假设您的班级名为Example
在onCreate
你能做到:
Example.this.getApplication();
或者,我更喜欢的另一种更复杂的方法是:
在您的班级正文中声明Activity activity;
,然后在onCreate
声明activity = this;
,然后在您的onClick
声明activity.getApplication();
中,如下:
public class Example extends Activity{
Activity activity;
@Override
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(...);
activity = this;
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
activity.getApplication();
}
};
}
修改强>
或者删除this
。这也应该有用。
答案 3 :(得分:1)
java中的“this”表示您所在的课程。
因此,您在onClick(View v)中的课程是“b”。 “b”没有getApplication()方法,这是正确的。
使用此功能时可能会引用某些内容。
做类似
的事情public class MyActivity extends Activity{
public initB(){
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setMyData();
}
});
}
public setMyData(){
MyData md = (MyData)this.getApplication();
md.setName("");
md.setIP("");
}
}
现在,当你使用它时,这指的是MyActivity。
答案 4 :(得分:1)
如果您创建了类似
的活动public class MainActivity extends Activity {
....
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyData md = (MyData)MainActivity.this.getApplication();
md.setName("");
md.setIP("");
}
});
....
}
使用你的类名,然后使用this.getApplication()因为"这个"你用过将指向View.onClickLIstener方法....因为它没有任何getApplication方法它抛出这个错误。 :)