2017-05-31 78 views
0

我想从一个非活动类中调用我的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) 
+0

你在哪里调用此方法? –

+0

我从main中调用一个方法,在类中调用main中的方法。 Main-> Class-> Main – user8091716

+0

什么是方法和你叫 –

回答

0

你应该做的,是通过一个context到非活动类,然后使用该上下文来调用活动的方法,像

((MainActivity)context).boob(); 

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

NSOMUHUpdateChecker myobj=new NSOMUHUpdateChecker(MyActivity.this); 

,然后在类的构造函数

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

希望这有助于。

0

你要通过contextboob方法

变化

public static void boob() 

public static void boob(Context context) 
+0

我没有,它说“错误:(46,21)误差:类MainActivity方法布布不能被应用到给定的类型;需 :找到语境 :没有参数 理由:实际的和正式的参数列表的长度不同” – user8091716

+0

以及我猜你没有选择 - 创建单独的类并粘贴此方法。 – DEADMC

0

您可以通过简单的非活性类中创建一个回调接口做到这一点,只需要实现它在主要活动中。

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

    private Callback callerActivity; 

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

而且在主要活动中,

public class MainActivity extends Activity 
    implements IDateCallback { 

    public void boob() { 
     //your code! 
    } 
} 
相关问题