2017-05-31 77 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! 
    } 
} 
相關問題