无法从另一个模块调用方法:Android Studio

5

我在 Android Studio 中有两个模块:

  1. 标准的 Android 应用程序模块
  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";
    }
}

但是,当我尝试从App模块内的类中调用new DomainUtils(context).toast("hi");时:

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

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

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


使用static并不是一个解决方案,我认为。 - erluxman
2
如果尝试“使无效并重新启动”会怎样?在我的应用程序模块 gradle 中,compile project(path: ':domain') - Rust Fisher
1
调用Activity/Class时导入DomainUtils是否出现了任何错误? - Sreehari
1
非常奇怪的问题,您传递的是“Application”上下文还是“Activity”上下文。 - Sunil Sunny
问题实际上与所提出的问题无关...问题和提问...并不相关。问题存在是由于另一段代码中的副作用引起的。 - erluxman
显示剩余6条评论
3个回答

6

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

include ':app', ':domain'

如果有版本可用,也要包含版本信息,例如

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

现在,在路径MainProject>app>build.gradle下的app文件夹中包括:
dependencies {
  ..........
  compile project(':domain')
}

请再次包含版本细节(如果有)。查看此处以获取更多详细信息。
根据评论,您可以进行一次额外的验证,以确定库是否已正确包含。清理并重新构建应该会进行正确配置,但仍需确保Android Studio已更新以下内容。
检查app.iml中是否已包含模块。
MainProject > app > app.iml

<component>标签中应该有以下类似的条目。
<orderEntry type="module" module-name="domain" exported="" />

编辑:

尝试在runOnUiThread中运行您的Toast消息,这应该解决错误。


我认为我已经按照你的建议做了,但没有成功。 - erluxman
1
希望你的调试器能够运行到Toast消息行。如果可以的话,尝试在runOnUiThread中使用Toast消息...这只是一个猜测。也可能是绝对的错误... :) - Sreehari
1
正如我在之前的评论中所说,只需在您的DomainUtils中尝试使用runOnUiThread即可。 - Sreehari
请删除此问题,因为问题、解决方案和标题都不相关。 - erluxman
让我们在聊天中继续这个讨论 - erluxman
显示剩余6条评论

3
在构建项目之前,请不要忘记在你的build.gradle文件中添加模块。
dependencies {

  compile project(':domain')
}

然后在调用该方法时,像下面这样传递当前类的上下文。

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

我正在做同样的事情。 - erluxman
有没有捕获到任何异常。 - Sujith Ks
你能传递getApplicationContext()吗? - Sujith Ks
请投票关闭此问题...这个问题与直接相关的不是很大,而是由于另一段代码的副作用引起的。 - erluxman
我认为可能是一些内存问题。 - Sujith Ks
我从来不知道我也可以投票评论 :D 谢谢你的提示 :D - erluxman

-1

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

include ':your_module'

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

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


我可以轻松访问这个类,甚至自动补全也能正常工作,问题出现在运行时。 - erluxman
请投票关闭此问题...问题并非直接与该问题相关,而是由另一段代码的副作用引起的。 - erluxman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接