在androidjava中class一个到另一个class的调用方法?
Calling method of class one to another class in android java?
嘿开发者我有一个快速的问题,我有一个方法存在于我的 MainActivity 中,现在我想在我的 LoginActivity 中调用该方法。我已经通过 getInstance 完成了这件事,但它给了我一个错误,我在下面分享:
我的调用方法:
在我的 MainActivity 中,我使用 :
private static MainActivity instance;
instance = this;
public static MainActivity getInstance() {
return instance;
}
登录activity 我使用:
MainActivity.getInstance().checktag(cnic);
Logcat:
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.onResponse(LoginActivity.java:163)
at info.androidhive.loginandregistration.activity.LoginActivity.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)
是否解决了这个问题?
从错误日志看来,当 LoginActivity 位于顶部时,您正试图在 MainActivity.checktag() 函数中显示对话框。这是不允许的。对话框需要由顶部的 Activity 管理。
更新:
澄清一下,错误不是由于从 LoginActivity 调用 MainActivity 的方法。这里的问题是您的代码正在创建一个带有 MainActivity 上下文的对话框,但它不是当前活动的 activity。
如果您打算重用一些代码来显示 MainActivity 和 LoginActivity 之间的对话,您可以将该函数移动到一个新的 Utility class,然后将当前的 Activity函数的实例。在将代码保留在 MainActivity 本身的同时也可以这样做,但在我看来,前一种方法看起来更清晰。
您需要将该函数声明为 public 和静态函数,您可以从应用程序的任何位置调用它们。例子
MainActivity.java
public static void some(){
//TODO something
}
LoginActivity.java
MainActivity.some();
嘿开发者我有一个快速的问题,我有一个方法存在于我的 MainActivity 中,现在我想在我的 LoginActivity 中调用该方法。我已经通过 getInstance 完成了这件事,但它给了我一个错误,我在下面分享:
我的调用方法: 在我的 MainActivity 中,我使用 :
private static MainActivity instance;
instance = this;
public static MainActivity getInstance() {
return instance;
}
登录activity 我使用:
MainActivity.getInstance().checktag(cnic);
Logcat:
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.onResponse(LoginActivity.java:163)
at info.androidhive.loginandregistration.activity.LoginActivity.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)
是否解决了这个问题?
从错误日志看来,当 LoginActivity 位于顶部时,您正试图在 MainActivity.checktag() 函数中显示对话框。这是不允许的。对话框需要由顶部的 Activity 管理。
更新: 澄清一下,错误不是由于从 LoginActivity 调用 MainActivity 的方法。这里的问题是您的代码正在创建一个带有 MainActivity 上下文的对话框,但它不是当前活动的 activity。 如果您打算重用一些代码来显示 MainActivity 和 LoginActivity 之间的对话,您可以将该函数移动到一个新的 Utility class,然后将当前的 Activity函数的实例。在将代码保留在 MainActivity 本身的同时也可以这样做,但在我看来,前一种方法看起来更清晰。
您需要将该函数声明为 public 和静态函数,您可以从应用程序的任何位置调用它们。例子
MainActivity.java
public static void some(){
//TODO something
}
LoginActivity.java
MainActivity.some();