【问题标题】:Can't call a method from outside of a java class无法从 Java 类外部调用方法
【发布时间】:2018-05-31 02:04:01
【问题描述】:

我在UpdateActivity.java 中有一个方法名称checkForUpdate()。它看起来像这样:

@NonNull
@SuppressWarnings("deprecation")
protected String checkForUpdate(int curVersionCode) {
  HttpClient httpclient = new DefaultHttpClient();
  ... 
}

我正在尝试从另一个活动中调用它。所以我尝试使用这样的代码:

private void callFromAnotherActivity() {
  UpdateActivity updateApp = new UpdateActivity();
  String result = updateApp.checkForUpdate(...);
}

所以当我输入updateApp. 时,会出现UpdateActivity.java 的方法列表,但没有checkForUpdate() 方法。为什么?

【问题讨论】:

  • 首先这不是使用活动的正确方式。您的两个活动都在同一个包中?
  • 是的,它们在同一个包中。
  • 你能分享更多你在 firstActivity 中编写的代码吗?
  • 这行不通,真的不应该,因为您不想创建一个新的UpdateActivity Activity 只是为了使用您希望重用的方法。像checkForUpdate() 这样的方法如果要可重用,就值得拥有自己的类。
  • 看起来您缺少 Java 和 Android 基础知识,例如 Java access modifiersAndroid Activities。请先通过一些基础培训,然后再继续

标签: java android methods call


【解决方案1】:

所以当我输入 updateApp.然后出现 UpdateActivity.java 的方法列表,但没有 checkForUpdate() 方法。为什么?

这是因为你的方法不是公开的,可能你还没有导入UpdateActivity

请注意,您不能通过调用以下方法来创建 Activity:

UpdateActivity updateApp = new UpdateActivity();

你需要使用这样的东西:

// context is your activity context.
Intent updateApp = new Intent(context, UpdateActivity.class);
context.startActivity(updateApp);

我的建议:

您需要将checkForUpdate 方法从UpdateActivity 移出,并将其作为一个实用程序。因此,使用该方法的其他活动将不依赖于并与UpdateActivity 耦合。将方法本地化为类似这样的实用程序类:

public class UpdateUtil {

  ...

  @NonNull
  @SuppressWarnings("deprecation")
  public static String checkForUpdate(int curVersionCode) {

    HttpClient httpclient = new DefaultHttpClient();
    ... 

  }
}

然后使用该方法:

UpdateUtil.checkForUpdate(1);

如果您无法移动代码(例如,您没有代码的所有权),您可以执行以下操作:

  1. checkForUpdate 设为静态方法
  2. 使用 EventBus 告诉UpdateActivity 进行更新。

【讨论】:

  • 谢谢。我正在尝试遵循您的建议。如果成功,我会告诉你。你说得对,我缺乏一些基本概念。
【解决方案2】:

您不应创建活动类的实例。这是错误的。活动有 ui 和生命周期,活动由 startActivity(intent) 启动 在这里查看:call a method in another Activity

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2023-03-23
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多