【问题标题】:Cannot call method from another Module : Android studio无法从另一个模块调用方法:Android Studio
【发布时间】:2017-05-26 09:03:25
【问题描述】:

我在 android studio 中有两个模块

  1. 标准安卓应用模块
  2. 域模块

settings.gradlebuild.gradle 都添加了域模块

include ':mobile', ':domain' & compile project(':domain')分别是这样的

在域模块中,我有一个这样的类:

public class DomainUtils {

    Context mContex;
    public DomainUtils(Context context){
        this.mContex = context;
    }
    public  void toast(String string){
        Toast.makeText(mContex, string,Toast.LENGTH_LONG).show();
    }
    public String returnHi(){
        return "hi";
    }
}

但是当我尝试打电话给new DomainUtils(context).toast("hi");

来自App 模块内的类

  1. DomainUtils 中的方法不执行
  2. 程序流不会继续到调用类中的下一行(程序流停止”
  3. 我在 logcat 中看不到任何错误日志。

------------但是 ----------

当我运行 returnHi() 方法时,它工作正常。

【问题讨论】:

  • 我认为使用静态不是解决方案
  • 如果你在 DomainUtils 构造函数中设置了一个调试断点,在 toast 方法中设置了另一个断点。他们被击中了吗?
  • 如果尝试“无效并重新启动”会怎样?在我的应用模块 gradle compile project(path: ':domain')
  • 在调用Activity/Class中导入DomainUtils是否报错?
  • 很奇怪的问题,你传递的上下文是Application Context还是Activity Context

标签: android android-module


【解决方案1】:

首先在主项目文件夹的settings.gradle 中提及库

include ':app', ':domain'

如果有的话,也包括版本,比如

include ':app', ':library-2.19.0'

现在在路径MainProject>app>build.gradle 下的app 文件夹内包含

dependencies {
  ..........
  compile project(':domain')
}

如果可用,请再次包含版本详细信息。查看 this 了解更多详情

根据 cmets,您可以再验证是否正确包含库。清理和重建应正确配置,但仍需确保 Android Studio 更新了以下内容。

检查app.iml是否包含模块

MainProject > app > app.iml

<component> 标签中应该有一个条目,如下所示

<orderEntry type="module" module-name="domain" exported="" />

编辑:

尝试在runOnUiThread 中运行您的Toast 消息。它应该可以解决错误。

【讨论】:

  • 我想我已经按照你的建议做了,但没有运气
  • 你编辑 build.gradle 的位置是 wright 的吗?不止一个。您可能知道,但是,以防万一您错过了......
  • 是的,第一个是 settings.gradle,第二个是 app 目录中的 build.gradle 我没有版本控制,所以第二个片段对我没有用
  • 希望你的调试器到达 Toast 消息行。如果然后尝试在 runOnUiThread 中使用 Toast 消息...这只是一个疯狂的猜测。也可能是一个绝对的错误...... :)
  • 正如我在之前的评论中所说,只需尝试在 DomainUtils 中使用 runOnUiThread
【解决方案2】:

在构建项目之前,不要忘记在 build.gradle 中添加模块。

dependencies {

  compile project(':domain')
}

然后在调用方法时传递当前类上下文,如下所示。

 new DomainUtils(YourClassName.this).toast("hi");

【讨论】:

  • 我也在做同样的事情
  • 是否有异常捕获。
  • 你能不能通过getApplicationContext()
  • 请投票结束这个问题......这个问题与问题没有直接关系,而是由于另一段代码的副作用
  • 是的,我想,可能是一些内存问题。
【解决方案3】:

从文件 settings.gradle 添加完整路径模块。

包括 ':your_module'

project(':your_module').projectDir = new File(settingsDir, 'absolute_path').

absolute_path 从文件夹容器 settings.gradle 开始

【讨论】:

  • 我可以轻松访问该课程,甚至自动完成工作正常,问题出在运行时
  • 请投票结束这个问题......这个问题与问题没有直接关系,而是由于另一段代码的副作用
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 2012-04-30
  • 1970-01-01
  • 2014-07-06
  • 2023-03-12
  • 2020-05-15
  • 1970-01-01
相关资源
最近更新 更多