【问题标题】:Why can't i access method from another class but can access variable?为什么我不能从另一个类访问方法但可以访问变量?
【发布时间】:2019-11-17 03:43:32
【问题描述】:

我有两个名为 abc 和 def 的类。类 abc 具有名为“paths”的字符串和名为“test”的函数。我可以轻松地使用另一个类“def”中的变量“paths”,但似乎无法从类“def”中调用函数“test”。

我在 def 类中创建了一个 abc 类的对象,并试图调用该函数,但它不起作用。

public class abc extends Activity {
    String paths="path";
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        test("lol");
    }
    public void test(String name){
        Toast.makeText(abc.this,name,Toast.LENGTH_LONG).show();
    }
}

public class def extends Activity {
abc x= new abc();
String paths=x.paths;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(def.this,paths,Toast.LENGTH_LONG).show();// This is 
    //working
    x.test("hahahas"); // Not working
    }
}

我希望 class def 使用来自 class def 的方法“test”,并从 class def 传递参数。

【问题讨论】:

  • 您遇到的错误是什么
  • 您的意思是让def 扩展abcx.onCreate(savedInstanceState); 吗?
  • 我正在开发一个安卓应用。它说应用程序已停止工作。
  • 不相关:Java 中的类名采用 UpperCamelCase。
  • 准确定义“不工作”。并不是说正在工作的指令是使用 current 活动(def.this,可能只是 this)创建一个 Toast,而不起作用的指令是创建一个单独的 Toast,不相关的活动 (abc.this)

标签: java android class object methods


【解决方案1】:

问题是这样的

abc x= new abc();

您不应该以这种方式创建扩展 Activity 的实例。你应该使用startActivitystartActivityForResult

此外,您根本不应该在另一个活动的实例中持有对一个活动的引用,因为活动是由 Android 创建和销毁的,因此您持有的对它的引用可能会过时。见Android Activity Lifecycle`。只需旋转您的设备即可实现这一目标。

在“构建您的第一个应用程序”教程中,我们有start another activity,假设您确实想要启动另一个活动。你需要了解意图;让我引用那个链接:

Intent 是一个对象,它在不同的组件(例如两个活动)之间提供运行时绑定。 Intent 代表应用程序的“做某事的意图”。

【讨论】:

  • 由于我是 Java 新手,请您解释一下在这种情况下如何使用 startActivity
  • 我添加了另一个链接。看来问题不在于您是 Java 新手,而在于您是 Android 新手 - 请尝试初学者教程。
  • 你是对的,问题很小,但我已经坚持了几个小时。谢谢你的链接,我去看看。
【解决方案2】:

感谢您的所有 cmets。我找到了解决方案。在类 def 中,我没有扩展 Activity,而是使用了

public class def extends abc

使类“def”成为“abc”的子类。而在这一行之后

super.onCreate(savedInstanceState);

在“def”类中,我添加了如下所示的一行来完成这项工作。

super.test("lol123");

【讨论】:

    【解决方案3】:

    这些类是否在同一个包中? (我假设它们在同一个包中,因为您没有 String paths 的公共前面)

    如果一个方法是公开的,你应该可以从任何地方调用它。 所以我猜你的测试用例有问题。 尝试使用不扩展 Activity 并且只有测试所需的方法的类。然后进一步扩展您的测试用例,直到它停止工作。

    路径变量是最终的吗? 你可能想给它添加public static final修饰符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2015-01-21
      • 2011-06-10
      • 2012-06-03
      • 2012-08-13
      相关资源
      最近更新 更多