我知道这是非常基本的,但我只是看不出问题是什么...我想要做的就是将变量的值从一个类设置为“中间”类并在一个类中检索它第三类(因为filterArray也会从其他类调用,我希望它们都能读取相同的数据)。但如果我这样做:
b =new GetSet()
b.setBdl(extras);
JSONArray arr= getData.filterArray();
使用
class GetSet {
private Bundle params;
public GetSet() {
}
public Bundle getBdl() {
return this.params;
}
public void setBdl(Bundle bdl) {
params = bdl;
}
}
然后在filterArray方法中,如果我尝试
Bundle params = new GetSet().getBdl();
我遇到各种运行时错误,如果我尝试
Bundle params = GetSet.getBdl();
它告诉我我不能对非静态方法进行静态引用。 我哪里错了?
答案 0 :(得分:0)
您应该将b
传递给filterArray
方法。
首先更改filterArray
以获取GetSet
类型的一个参数:
public JSONArray filterArray(GetSet b)
然后,将其称为:
getData.filterArray(b);
在filterArray
内,只需使用:
Bundle params = b.getBdl();
问题是你创建了一个对象并设置了一个值,然后你需要从相同的对象中获取值。
使用对象时,可以创建所需类的新对象,设置其内部值,当您从不同位置访问同一对象时,内部值将相同(我在{{{ 1}}和GetSet
。
另一个选择是使用静态值(和静态getter和setter),如果该类的所有对象的值相同。这通常不需要,并且可能由于设计不良而被使用。在你的情况下,你真的不需要它,但它会起作用。
答案 1 :(得分:0)
错误是因为您以错误的方式使用它
查看你的getBdl签名,它是一个公共Bundle
方法,它是一个非静态方法,因此不能被类名访问。
应该通过bean对象b,
访问它第二个错误也有关系,
你用对象b编写/设置bean的属性但是当你访问它时,你又在创建一个新的GetSet()。getBdl,所以它说Null pointer exception
所以这样做
GetSet b = new GetSet(); b.setBdl(bundle object);
所以现在b包含值 通过b ...
所以通过b获取bundle,如果你需要从另一个类中访问它,将b传递给它的构造函数并获取它们的
SomeClass class = new SomeClass(b); 现在在那个班级你可以通过b
获得捆绑 希望这一切对你有帮助。