无法从主项目访问变量?

Posted

技术标签:

【中文标题】无法从主项目访问变量?【英文标题】:Can't access variable from main project? 【发布时间】:2020-11-30 06:53:10 【问题描述】:

我无法从我的库类中访问 hi 变量。为什么?看看吧:

我的库中有这个接口:

interface ContextAccessor 

    fun getApplicationContext(): Application?

还有这段代码:

class SomeLibraryClass 
    private var mContextAccessor: ContextAccessor?

    String extractedHi = null

    fun setContextAccessor(contextAccessor: ContextAccessor?) 
        mContextAccessor = contextAccessor
    
    
    fun someOtherMethod() 
        mContextAccessor?.getAppContext()?.let  nonNullContext ->
            // use nonNullContext here
            extractedHi = nonNullContext.hi; // i get error here!
        
    

还有我项目中的这个类:

public class MyActivity extends Activity implements  MyActivity.ContextAccessor 
    
    private SomeLibraryClass someLibraryClassInstance = SomeLibraryClass();

    public String hi = "hi";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        // ContextAccessor reference is set to some library class
        someLibraryClassInstance.setContextAccessor(this);
    

    @Override
    protected void onDestroy() 
        super.onDestroy();
        // Super important!
        someLibraryClassInstance.setContextAccessor(null);
        // OR create some method like `someLibraryClassInstance.removeContextAccessor(this)`
    

    @Override
    public Application getApplicationContext() 
        return super.getApplication();
    

【问题讨论】:

ApplicationMyActivity.ContextAccessor的代码是什么?我不明白这些东西是如何联系在一起的。 @al3c 好吧,我只是按照这个答案的建议:***.com/a/63206457/13976983 他没有回答,所以我决定在这里问一个问题。 如果您能启发我,我将不胜感激。因为我迷路了。我也看不出它们是如何联系在一起的:( getApplicationContext 返回一个应用程序。我不知道应用程序是什么样的,您没有发布源代码。你希望它有一个名为hi 的属性我看到一个活动有一个hi public 归档,但它与任何东西都没有关系,它应该是一个名为getHi 的getter,并且至少是某个接口的一部分. @al3c 我想我差不多明白了。但是,拜托,因为我是初学者,你能用代码写一个完整的答案吗?谢谢 【参考方案1】:

ContextAccessor接口中添加hi属性:

interface ContextAccessor 

    val hi: String
    // ...

并在MyActivity 中实现getHi() 方法:

@NotNull
@Override
public String getHi() 
    return hi;

在您的库类SomeLibraryClass 中,您可以像下面这样访问它:

var extractedHi: String? = null

fun someOtherMethod() 
    extractedHi = mContextAccessor?.hi

【讨论】:

好的,但我遇到了同样的问题i.imgur.com/8Z6hjlR.png 试试nonNullContext.hi,因为这是一个属性 嗯,你应该这样做:mContextAccessor?.hi

以上是关于无法从主项目访问变量?的主要内容,如果未能解决你的问题,请参考以下文章

从主循环访问线程变量 - c++ - windows

Visual Studio - VB - Windows 窗体项目 - 未声明“变量”。可能无法访问

无法从主 UIViewController 访问嵌入式 UICollectionView

访问组件 c#

如何将框架项目添加到主项目并从主项目配置框架项目的设置

刀片模板中的@php 标记无法访问内联变量