如何从非活动类调用静态方法?

时间:2017-05-31 11:45:26

标签: android

我正在尝试从非活动类中调用Activity中的方法。但app力量关闭了。无法弄清楚如何解决这个问题,所以我发布了它。

公共类MainActivity扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        NSOMUHUpdateChecker.checkForUpdates(getBaseContext());
}

public static void boob() {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("Are you sure you want to exit?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                //
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DgrialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

公共类NSOMUHUpdateChecker {

public static void checkForUpdates(Context context) {
    MainActivity.boob();
}

日志:

FATAL EXCEPTION: main Process: nif.nhst, PID: 16378
java.lang.RuntimeException: Unable to start activity ComponentInfo{nif.nhst/nif.nhst.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)

3 个答案:

答案 0 :(得分:0)

您应该做的是将context传递给您的非活动类,然后使用该上下文调用活动方法,例如

((MainActivity)context).boob();

在你的情况下,你也可以做一些像

这样的事情
NSOMUHUpdateChecker myobj=new NSOMUHUpdateChecker(MyActivity.this);  

然后在你的类构造函数

public NSOMUHUpdateChecker(MyActivity act) { 
        act.boob();
    } 

希望这有帮助。

答案 1 :(得分:0)

您必须将context传递给boob方法

更改

public static void boob() 

public static void boob(Context context)

答案 2 :(得分:0)

您可以通过在非活动类中创建回调接口并在主活动中实现它来实现此目的。

HashMap.remove()

在主要活动中,

public NonActivityClass {
    public interface Callback {
        void boob();
    }  

    private Callback callerActivity;

    public NonActivityClass(Activity activity) {  
        callerActivity = (Callback)activity;  
    }
    ...  
} 
//call like this
callerActivity.boob();