类之间的价值转移

时间:2014-08-06 14:13:31

标签: java android class object

我有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上设置的值? 提前谢谢。

4 个答案:

答案 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。