2013-10-03 18 views
-2

我剛開始使用BroadcastReceiver(這可能是我的問題)。我試圖創建一個服務的視圖(是的,是的,我知道你不能),所以我發送請求到一個看不見的活動,以創建一個可見的視圖,當我需要。它不工作,因爲我想要所以我看着BroadcastReceivers。到目前爲止,所有事情都與我無法將我的getStringExtra值與任何東西進行比較的異常一起工作。例)說我想通過變量「param」的值爲String「CREATE」到我的BroadcastReceiver。它到達我的接收器罰款和logcat我可以看到,確實方法是「創建」。但如果我想檢查什麼參數與if語句if(param ==「CREATE」)它永遠不會進入if。那麼我在這裏做錯了什麼?intent.getStringExtra不可比

public class Receiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context c, Intent i) { 
     String stuff = i.getStringExtra("param"); 
     log(stuff); 
     if (stuff=="CREATE"){ 
      log("why dem feels"); 
     } 
     if((String)i.getStringExtra("method")=="CREATE"){ 
      log("i dont know what im doing"); 
     } 
     log("FOR SOME REASON ITS SKIPPING THIS STEP"); 
    } 



    //set of logs so that i dont have to keep specifying tags and shit 
     public void log(int in){ 
       Log.d("TAG OF INTEGERS",Integer.toString(in)); 
      } 

      public void log(String s){ 
       Log.d("Receiver",s); 
      } 
      public void log(float f){ 
       log((int) f); 
      } 

} 

這是我用我的服務代碼發送廣播

Intent i = new Intent(); 
      i.setClassName("com.example.starteroverlay","com.example.starteroverlay.Receiver"); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      String methodCall = "CREATE"; 
      i.putExtra("param",methodCall); 
      // 
      sendBroadcast(i); 

,只是因爲我想你們會希望看到我的清單部分的代碼

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

<receiver android:name=".Receiver"> 
      <intent-filter android:priority="0"> 
       <action android:name="android.intent.action.MAIN"/> 
      </intent-filter> 
     </receiver> 
+0

的可能重複[怎麼辦我比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

+0

刪除'i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);'這不需要接收器。 –

回答

2

使用equals方法總是會檢查字符串的內容,但==僅檢查對象引用

if (method.equals("CREATE")) 
{ 
     //do what you need 
} 
+0

不是開玩笑,我花了好幾個小時尋找那個。我正在尋找一個更小的規模,雖然看看爲什麼我的意圖可能會失敗,或爲什麼我的接收器沒有得到它所需要的。大聲笑我需要檢查字符串,而不是。非常感謝你爲sunil –

+0

你歡迎T-he-game –

2

使用equals()代替==比較字符串

所以你的代碼更改爲

if (method.equals("CREATE")) 

檢查http://docs.oracle.com/javase/tutorial/java/data/comparestrings.html

PS。

更改您的代碼要

if (stuff.equals("CREATE")){ 
    log("why dem feels"); 
    } 
if((String)i.getStringExtra("method").equals("CREATE")){ 
    log("i dont know what im doing"); 
} 
0
// try this 
@Override 
    public void onReceive(Context c, Intent i) { 
     String stuff = i.getStringExtra("param"); 
     if (stuff.equals("CREATE")){ 
      // write your code here 
     } 
    }