2012-10-09 246 views
3

我在從靜態方法調用非靜態方法時面臨很大的問題。如何從靜態方法調用非靜態方法android

這是我的代碼

Class SMS 
{ 
    public static void First_function() 
    { 
     SMS sms = new SMS(); 
     sms.Second_function(); 
    } 

    public void Second_function() 
    { 
     Toast.makeText(getApplicationContext(),"Hello",1).show(); // This i anable to display and cause crash 
     CallingCustomBaseAdapters(); //this was the adapter class and i anable to call this also 
    } 

我能叫Second_function但無法獲得麪包和CallCustomBaseAdapter()方法時,發生崩潰。

我應該怎麼做才能解決這個問題?

+1

發表您的崩潰日誌這裏.... –

+0

你應該使用RunOnUiThread – Eun

+0

嘗試通過上下文來作爲參數在使用靜態方法的非靜態方法中。我的意思是將上下文傳遞給靜態方法,然後將相同的上下文傳遞給非靜態方法。 – Dharmendra

回答

7
public static void First_function(Context context) 
    { 
    SMS sms = new SMS(); 
    sms.Second_function(context); 
    } 

    public void Second_function(Context context) 
    { 
    Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash 
    } 

實現這一目標的唯一的解決辦法是,你需要傳遞當前上下文作爲參數。 我爲Toast編寫了代碼,但您需要根據您的要求對其進行修改。

通過從你的活動First_function(getApplicationContext())等背景下的..

靜態字符串

public static String staticString = "xyz"; 

public static String getStaticString() 
{ 
    return staticString; 
} 


String xyz = getStaticString(); 
+0

是否可以將字符串值從靜態字符串移動到非靜態字符串? – Vishnu

+0

我已經編輯了靜態字符串的答案。 –

1

你應該有一個上下文的引用。您正嘗試從SMS實例中獲取應用程序上下文。

我想你是從一個活動或服務調用First_function。所以,你可以這樣做:

Class SMS 
{ 
    public static void First_function(Context context) 
    { 
     SMS sms = new SMS(); 
     sms.Second_function(context); 
    } 

    public void Second_function(Context context) 
    { 
     Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash 
     CallingCustomBaseAdapters(); //this was the adapter class and i anable to call this also 
    } 

然後,從你的活動:

SMS.First_function(this); //or this.getApplicationContext() 
+0

你能告訴我如何有一個參考? – Vishnu

+0

編輯的答案;) –

+0

你的代碼如何比原本寫的代碼更好? SMS仍然沒有提及上下文 - 它只是一個不擴展活動的類。原始代碼很好,因爲非靜態方法在靜態上下文中沒有被調用。不幸的是,Vishnu似乎並不知道發生了什麼,但這並不意味着你只需要遵循它。 – aamit915

相關問題