在androidjava中调用一个类的方法到另一个类?

pqwbnv8z  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(501)

我有一个简单的问题,我有一个方法,它存在于我的主要活动中,现在我想在我的loginactivity中调用这个方法。我已经通过getinstance做了这件事,但它给了我一个错误,我在下面分享:
我的调用方法:在我的主要活动中,我使用:

private static MainActivity instance;
  instance = this;
 public static MainActivity getInstance() {
        return instance;
    }

在登录活动中,我使用:

MainActivity.getInstance().checktag(cnic);

日志:

2020-12-02 16:22:03.897 12153-12153/info.androidhive.loginandregistration E/AndroidRuntime: FATAL EXCEPTION: main
    Process: info.androidhive.loginandregistration, PID: 12153
    android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@c69530c is not valid; is your activity running?
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:679)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
        at android.app.Dialog.show(Dialog.java:322)
        at info.androidhive.loginandregistration.activity.MainActivity.showDialog(MainActivity.java:532)
        at info.androidhive.loginandregistration.activity.MainActivity.checkmtag(MainActivity.java:308)
        at info.androidhive.loginandregistration.activity.LoginActivity$2.onResponse(LoginActivity.java:163)
        at info.androidhive.loginandregistration.activity.LoginActivity$2.onResponse(LoginActivity.java:134)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

这个问题有解决办法吗?

5vf7fwbs

5vf7fwbs1#

从错误日志来看,当loginactivity位于顶部时,您似乎试图在mainactivity.checktag()函数中显示一个对话框。这是不允许的。对话框需要由位于顶部的活动管理。
更新:澄清一下,错误不是由于从loginactivity调用mainactivity的方法引起的。这里的问题是,当mainactivity上下文不是当前活动时,您的代码正在创建一个对话框。如果您打算重用一些代码来显示mainactivity和loginactivity之间的对话框,那么可以将函数移动到新的实用程序类,然后将当前活动示例传递给函数。同样的方法也可以在mainactivity中保存代码,但是在我看来,前一种方法看起来更干净。

2w2cym1i

2w2cym1i2#

您需要将该函数声明为public和static,并且可以在应用程序的任何位置调用它们。例子
主活动.java

public static void some(){
   //TODO something
}

物流活动.java

MainActivity.some();

相关问题