【问题标题】:Value transfer between classes类之间的价值转移
【发布时间】:2014-08-06 14:13:31
【问题描述】:

我有 3 节课,这些都是

A : MainActivity

B:型号

C : 控制器

我正在尝试在它们之间传递值。我在 Model 类中为每个变量设置了方法。我要做的是在 MainActivity 上设置值,然后通过 Controller 类上的一些方法处理该值,并将该方法的结果再次设置为 Model 类。当我检查控制器类上的设置变量时,我得到空值。我在 MainActivity 上定义 Model 类的公共静态对象来设置值。

public class MainActivity {
    public static Model model;
    private Controller controller;
    onCreate(){
        model=new Model();
        controller = new Controller ();
        model.setpName("someString");
        controller.doSth();
    }
}

在我的模型类中

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;
    } 
}

在我的控制器类中

public class Controller {
    public Model model;
    public void doSth(){
        model = new Model(); 
        System.out.println(model.getpName+"");

    }
}

当我检查时

System.out.println(model.getpName+"");

在控制器类上, 它返回空值。 我究竟做错了什么 ? 如何获得我在 MainActivity 上设置的值? 提前致谢。

【问题讨论】:

  • 你的控制器有一个未实例化的模型..至少根据你上面的代码
  • 对不起,我忘了写在这里。我真的做到了
  • 请更新问题中的代码
  • 也许你的控制器构造函数应该采用模型
  • 你能用一些示例代码写你的建议作为答案吗?

标签: java android class object


【解决方案1】:

你需要像这样替换你的代码;

    public class Controller {
    public Model model;
    public void doSth(){
        model = new Model(); 
        model = MainActivity.model;
        System.out.println(model.getpName+"");

    }
}

【讨论】:

  • 这正是我要找的!
【解决方案2】:

看起来你的模型从未注入到你的控制器中,所以这很正常。您的 MainActivity 类中的某处应该有类似以下行的内容

controller.setModel(model)

我可以提一下你的方法的命名不是很好。应该是

setPName()
getPName()
...

动作后带有大写字母:)

【讨论】:

  • 实际上这些是我的应用程序中的示例代码。但是,是的,你对那些丑陋的名字是正确的!:) 现在我要试试那个注入的东西,然后让你知道!。
  • 你能用一些示例代码解释一下吗?我想我听不懂你是什么意思?
【解决方案3】:

首先,您的控制器类没有 getpResult() 函数。你的意思是调用 doSth() 函数吗?

此外,控制器类中的模型变量永远不会被初始化。当你这样做

model.getpName()+"blabla";

你应该得到一个 NullPointerException。

最后一件事,只是为了确定,你打电话给

System.out.println(model.getpName+"");

调用 MainActivity 类的 onCreate() 方法之后生成,对吧?否则值为null是正常的。

【讨论】:

  • 你说得对,我要编辑它。我的控制器类中的一些其他方法需要该值。
【解决方案4】:

您没有实例化您的模型。所以你的 pName 是空的。

编辑以获得更多解释:

当你调用 doSth() 时

public void doSth(){
        model = new Model(); 
        System.out.println(model.getpName+"");

    }

您创建了一个新模型,并且它的 pName 为 null,因为 model = new Model();

您可以为您的控制器使用一个以模型为参数的构造函数,或者您可以使用 setter 方法将模型设置为您的控制器。你不应该使用 model = new Model();在你的生活中。

【讨论】:

  • 我用示例进行了解释。你可以在上面查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2019-04-14
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多