2013-03-15 35 views
0

在發佈之前,我做了我的研究,但我正在努力確切地瞭解問題所在。所以這是我在1類方法:爲什麼我不能從另一個包含Toast的類調用靜態方法?

public static void scan() { 
    for(int j=0; j< objarray.size();j++) 
    { 

     locationB.setLatitude(objarray.get(j).getlat()); 
     locationB.setLongitude(objarray.get(j).getlon()); 

     float distance = locationA.distanceTo(locationB); 

     if((distance < 600)&&(distance > 0.0)) 
     { 
      Toast.makeText(getApplicationContext(),"You can go to" +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

     } 

    } 

一切都在這個方法是靜態的,並給了我一個錯誤的唯一的事情就是Toast.makeText電話。我是否需要將某些東西傳遞給包含掃描方法的class1?

像這樣:

Class1.Scan(something); 

我覺得這可能有一些做的吐司內getApplicationContext(),但我不能確定到底是什麼,我需要爲了解決這個問題做。任何解釋讚賞!

+0

什麼是您的錯誤味精?請張貼您logcat,所以我們可以提供幫助。 – 2013-03-15 17:24:03

+0

如果它的'NullhPointer'異常,那麼我會說'objarray.get(j).gettitle()'這不是靜態的,你也可以通過使用'getApplicationContext'嘗試將當前活動的上下文傳遞給Toast。 – Prateek 2013-03-15 17:26:00

+2

正如其中一些答案暗示的那樣,即使你說「這個方法中的所有內容都是靜態的」,但事實並非如此。 'getApplicationContext()'不是。儘管下面的一些答案解決了您的直接問題,但請考慮[靜態方法通常是設計中更深層問題的指示器](http://www.benday.com/2010/03/15/article-static-methods-是-A-代碼氣味/)。 – kabuko 2013-03-15 17:29:13

回答

3

Do I need to pass something to class1 which contains the scan method?

是的,你需要將當前活動的上下文傳遞給Scan方法顯示吐司,而不是直接調用Class1getApplicationContext()方法(非活動類)。將掃描方法更改爲:

public static void Scan(Context context) { 
    //...your code here.... 
    Toast.makeText(context,"You can go to" 
        +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

    } 
+0

啊,這是有道理的,謝謝!那麼這個方法的調用在第二類中是什麼樣的呢,如下所示:Class1.Scan(Context context);謝謝!! – deucalion0 2013-03-15 17:27:52

+1

@ deucalion0:從Class2中調用Scan方法,如下所示:Class1.Scan(getApplicationContext());'或者Class Class'是一個Activity然後'Class1.Scan(Class2.this);' – 2013-03-15 17:29:43

+0

感謝您的幫助,class2擴展BroadCastReceiver和當我使用Class1.Scan(getApplicationContext())時,我得到這個錯誤「方法getApplicationContext()未定義類型ProximityIntentReceiver」。任何想法爲什麼?謝謝! – deucalion0 2013-03-15 17:59:03

1

您是否嘗試過將應用程序上下文傳遞給該方法? Class1.Scan(getApplicationContext())

public static void scan(Context context) { 
    for(int j=0; j< objarray.size();j++) 
    { 

     locationB.setLatitude(objarray.get(j).getlat()); 
     locationB.setLongitude(objarray.get(j).getlon()); 

     float distance = locationA.distanceTo(locationB); 

     if((distance < 600)&&(distance > 0.0)) 
     { 
      Toast.makeText(context,"You can go to" +objarray.get(j).gettitle(),Toast.LENGTH_SHORT).show(); 

     } 

    } 
+0

這是我現在正在嘗試但我得到的錯誤:「方法getApplicationContext()未定義的類型ProximityIntentReceiver」 – deucalion0 2013-03-15 18:01:13

相關問題