-1

我知道这真的很基本,但是我看不出问题出在哪里……我要做的就是将变量的值从一个类设置为“中间”类并在第三类中检索它(因为 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();

它告诉我我不能对非静态方法进行静态引用。我哪里错了?

4

2 回答 2

0

你应该传递bfilterArray方法。首先更改filterArray以获取一个类型的参数GetSet

public JSONArray filterArray(GetSet b)

然后,将其称为:

getData.filterArray(b); 

在里面filterArray只使用:

Bundle params = b.getBdl();

问题是您创建了一个对象并设置了一个值,然后您需要从同一个对象中获取该值。

使用对象时,您可以创建所需的任何类的新对象,设置其内部值,当您从不同位置访问同一个对象时,内部值将是相同的(我在这里谈论GetSetgetData.

如果类的所有对象的值都相同,则另一种选择是使用静态值(以及静态 getter 和 setter)。这通常不需要并且可能由于糟糕的设计而被使用。在您的情况下,您实际上并不需要它,但它会起作用。

于 2013-05-18T04:59:33.420 回答
0

错误是因为您以错误的方式使用它

查看您的 getBdl 签名,它是一个公共Bundle方法,它是一个非静态方法,因此无法通过类名访问。

它应该通过 bean 对象 b 来访问,

第二个错误也相关,

您使用对象 b 编写/设置了 bean 的属性,但是当您访问它时,您再次创建了一个新的 GetSet().getBdl 所以它说Null pointer exception

所以这样做

GetSet b=新的GetSet(); b.setBdl(捆绑对象);

所以现在 b 包含传递 b 的值...

所以通过 b 获取捆绑包,如果您需要从另一个类访问它,请将 b 传递给它的构造函数并获取它们的

SomeClass 类=新 SomeClass(b); 现在在该课程中,您可以通过 b 获得捆绑包

希望这一切都对你有帮助。

于 2013-05-18T05:05:18.393 回答