Java 在一节课上设置,从另一节课上获取

Java 在一节课上设置,从另一节课上获取,java,android,Java,Android,这是非常基本的我知道,但我只是不明白问题是什么。。。我所要做的就是将变量的值从一个类设置为一个“中间”类,并在第三个类中检索它(因为filterArray也将从其他类调用,我希望它们都读取相同的数据)。但如果我这样做: b =new GetSet() b.setBdl(extras); JSONArray arr= getData.filterArray(); 使用 然后在filterArray方法中,如果我尝试 Bundle params = new GetSet().ge

这是非常基本的我知道,但我只是不明白问题是什么。。。我所要做的就是将变量的值从一个类设置为一个“中间”类,并在第三个类中检索它(因为filterArray也将从其他类调用,我希望它们都读取相同的数据)。但如果我这样做:

b =new GetSet()
b.setBdl(extras);
JSONArray arr= getData.filterArray();  
使用

然后在filterArray方法中,如果我尝试

       Bundle params = new GetSet().getBdl();
我会遇到各种各样的运行时错误,如果我尝试

Bundle params = GetSet.getBdl();
它告诉我不能对非静态方法进行静态引用。
我哪里出错了?

您应该将
b
传递给
filterray
方法。 首先更改
filterary
以获取一个类型为
GetSet
的参数:

public JSONArray filterArray(GetSet b)
然后,像这样称呼它:

getData.filterArray(b); 
而在
过滤器阵列内部
只需使用:

Bundle params = b.getBdl();
问题是,您创建了一个对象并设置了一个值,然后需要从相同的对象中获取值

当使用对象时,您可以创建任何类别的新对象,设置其内部值,当您从不同位置访问同一对象时,内部值将是相同的(我在这里讨论的是
GetSet
getData


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

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

看看你的getBdl签名,它是一个公共的
Bundle
method,它是一个非静态的方法,所以不能被类名访问

它应该通过bean对象b访问

第二个错误也是相关的

您使用对象b编写/设置了bean的属性,但是当您访问它时,您再次创建了一个新的GetSet().getBdl,因此它显示
Null指针异常

你喜欢这个吗

GetSet b=新的GetSet(); b、 setBdl(束对象)

现在b包含了这个值 通过b

因此,如果需要从另一个类访问bundle,请将b传递到它的构造函数中,并从它们的构造函数中获取它

SomeClass=新的SomeClass(b); 现在,在这个类中,你可以通过b获得捆绑包


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

你很困惑你想做什么?你创建了一个新的GetSet,然后你在filterArray中说你创建了一个新的GetSet?很困惑。我试图从GetSet类中获取参数。但是如果我不包含new关键字,它会告诉我我不能对非静态方法进行静态引用。如果有,我也很困惑这是重点,因为稍后,从另一个方法中,我希望能够调用filterarray方法而不传递b(因为b已经被设置)我希望filter数组能够从GetSet类中获取b。您可以创建一个新的
getData
对象,并将
b
设置为内部值。另一个选项是“如果所有GetSet对象的值相同,则可以对param(以及getter和setter)使用static”但这是一个非常糟糕的设计。不,它总是在变化,这就是问题所在。我如何将b设置为内部值?您是否编写了getData类?这样您就可以向b添加b值以及getter和setter,就像您在
GetSet
类中使用
Bundle
所做的那样。然后,您需要再次确保访问getDa的同一对象ta来自各个地方。我不知道我是否在关注,但我认为这是我的问题…有时我可以将b传递到filterArray,但有时我会依赖于它已经被设置。我仍然不关注如何设置内部值。抱歉,我不太了解-我对java很陌生。但是如果该方法已经设置,b是否仍然存在完成了,我现在从一个不同的类调用它(我想我应该测试一下,看看)?看,即使这个方法已经完成了,你也把bean对象传递给了其他的类构造函数,这样b就可以生存,你就可以访问它的方法了。。。
Bundle params = b.getBdl();