2011-03-16 41 views
0

我有一個鬧鐘設置,該部分工作。收到警報時,我將字符串設置爲與警報一起保存的消息。但是當我在UI上顯示這個字符串時,它沒有設置。沒有從AlarmReceiver設置字符串

這是第一個代碼,顯示用戶界面,將顯示字符串:

public class ShowAlm extends Activity { 
private static String MessStr="ZZZ"; 

    public static void setMessStr(String messStr) { 
    MessStr = messStr; 
} 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.showalm); 


     Toast.makeText(this,"Message " + MessStr, Toast.LENGTH_SHORT).show(); 


    } 

然後測試它沒有我把另一個類的按鈕上面打電話報警,一切按預期工作:

btnplot.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       ShowAlm.setMessStr("AAA"); 



       Intent intent1 = new Intent(context, ShowAlm.class); 
       intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       context.startActivity(intent1); 

      //TestAlarm(); 
      //Intent intent = new Intent(v.getContext(), AutoComplete4.class); 
      // startActivity(intent); 

     } 
    }); 

這裏是問題所在,代碼與上面的按鈕相同,但在接收器中不起作用。該字符串未設置。

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
public void onReceive(Context context, Intent intent) { 
    try { 
     Bundle bundle = intent.getExtras(); 
     String message = bundle.getString("alarm_message"); 

     System.out.println("Message = " + message); 

     ShowAlm.setMessStr("AAA"); 



     Intent intent1 = new Intent(context, ShowAlm.class); 
     intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     context.startActivity(intent1); 

    } catch (Exception e) { 

    } 
} 

所以當上面的第二個代碼顯示MessStr是默認值。我也嘗試編碼「AAA」作爲字符串,但沒有幫助。

所以最終的結果是日誌顯示的字符串是存在的,但是當UI顯示時字符串是默認的。

想法?

回答

1

我假設問題在於它是一個靜態變量。當Receiver啓動新的活動時,它可能會再次加載該類,並且靜態變量將被初始化爲「ZZZ」。這樣做的正確方法是將String放入Intent Extras中。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.showalm); 
    Intent i = getIntent(); 
    MessStr = i.getStringExtra("alarmMessage", null); 
    if(MessStr != null) { 
     Toast.makeText(this,"Message " + MessStr, Toast.LENGTH_SHORT).show(); 
    } 
} 

public void onReceive(Context context, Intent intent) { 
    try { 
     Intent intent1 = new Intent(context, ShowAlm.class); 
     intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent1.putExtra("alarmMessage", "AAA"); 
     context.startActivity(intent1); 
    } catch (Exception e) { 
    } 
} 
+0

工作很好!那是你應該如何將變量傳遞給其他類的?我一直這樣做的方式似乎一直工作,直到接收器(),當我碰到deadend – 2011-03-16 17:15:32

+0

是的,這是在活動之間傳遞數據的方式。 – 2011-03-16 19:28:50