我有3个班级,而且他们是
A:MainActivity
B:模特
C:控制器
我试图在它们之间传递值。我在Model类中为每个变量设置了get-set方法。我想要做的是在MainActivity上设置值,然后通过Controller类上的某些方法处理该值,并再次将该方法的结果设置为Model类。当我检查Controller类I上的set变量时,得到null值。我在MainActivity上定义了Model类的公共静态对象来设置值。
public class MainActivity {
public static Model model;
private Controller controller;
onCreate(){
model=new Model();
controller = new Controller ();
model.setpName("someString");
controller.doSth();
}
}
和我的Model类
public class Model {
private String pName;
public String getpName(){return this.pName;}
public void setpName(String pName){this.pName=pName;}
private String pResult;
public String getpResult() {
return this.pResult;
}
public void setpResult(String pResult){
this.pResult=pResult;
}
}
和我的Controller类
public class Controller {
public Model model;
public void doSth(){
model = new Model();
System.out.println(model.getpName+"");
}
}
当我检查
时System.out.println(model.getpName+"");
在Controller类上, 它返回null值。 我究竟做错了什么 ? 如何获得我在MainActivity上设置的值? 提前谢谢。
答案 0 :(得分:1)
看起来您的模型永远不会在您的控制器中注入,所以这是正常的。您应该在MainActivity类中的某处具有类似以下行的内容
controller.setModel(model)
我可以提一下你的方法的命名并不是很好。它应该是
setPName()
getPName()
...
行动结束后使用大写字母:)
答案 1 :(得分:1)
首先,您的控制器类没有getpResult()函数。你的意思是调用doSth()函数吗?
此外,控制器类中的模型变量永远不会被初始化。当你这样做
model.getpName()+"blabla";
你应该得到一个NullPointerException。
最后一件事,只是为了确定,你打电话给
System.out.println(model.getpName+"");
>在调用MainActivity类的onCreate()方法之后,对吧?否则,该值为空是正常的。
答案 2 :(得分:1)
你需要像这样替换你的代码;
public class Controller {
public Model model;
public void doSth(){
model = new Model();
model = MainActivity.model;
System.out.println(model.getpName+"");
}
}
答案 3 :(得分:0)
您没有实例化您的模型。所以你的pName为空。
编辑以获得更多解释:
当你打电话给doSth()
时public void doSth(){
model = new Model();
System.out.println(model.getpName+"");
}
由于model = new Model();
,您创建了一个新模型,其pName为null您可以使用控制器的构造函数,它将模型作为参数,或者您可以使用setter方法将模型设置为控制器。你不应该使用model = new Model();在你的doSth。