Java 吐司出现两次

Java 吐司出现两次,java,android,Java,Android,我有一个程序,只需按一下按钮,就可以向一群人发送预定义的文本消息。我有它工作得很好,但我的问题是,当它发送消息时,它会弹出两个祝酒词,每个消息发送。代码: package com.mfd.alerter; //imports public class homeScreen extends Activity { //buttons /** Called when the activity is first created. */ @Override public void onCreate

我有一个程序,只需按一下按钮,就可以向一群人发送预定义的文本消息。我有它工作得很好,但我的问题是,当它发送消息时,它会弹出两个祝酒词,每个消息发送。代码:

package com.mfd.alerter;

//imports

public class homeScreen extends Activity {

//buttons

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //vars

    // Grab the time
    final Date anotherCurDate = new Date();  
    SimpleDateFormat formatter = new SimpleDateFormat("km");  
    final String formattedTime = formatter.format(anotherCurDate);

    // Contacts
    final String[] numbers = getResources().getStringArray(R.array.numbers);

    // Start messages. Only 1 is given to shorten post
    callStructureFire.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String msgText = "MFD PAGE OUT:\nStructure Fire\nTimeout:"+formattedTime;
            for (int i = 0; i < numbers.length; i++) {
                sendSMS(numbers[i], msgText);
            }
        }
    });

    //more call types. not important.
}

//---sends a SMS message to another device---
private void sendSMS(String numbers, String message)
{           
    String SENT = "SMS_SENT";

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
        new Intent(SENT), 0);


    //---when the SMS has been sent---
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS sent", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off", 
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, new IntentFilter(SENT));

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(numbers, null, message, sentPI, null);               
}  

//action bar stuff. not important.

}
package com.mfd.alerter;
//进口
公共类主屏幕扩展活动{
//钮扣
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//瓦尔斯
//抓紧时间
最终日期anotherCurDate=新日期();
SimpleDataFormat格式化程序=新的SimpleDataFormat(“km”);
最终字符串formattedTime=formatter.format(另一个curdate);
//接触
最终字符串[]number=getResources().getStringArray(R.array.numbers);
//开始消息。只有1个用于缩短post
callStructureFire.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
字符串msgText=“MFD页面输出:\n结构火灾\n超时:”+formattedTime;
for(int i=0;i
更详细地说:假设我给3个人发短信,6条祝酒词会弹出“短信已发送”。我怎样才能做到只有3个会出现


另外,是否有办法添加发送消息的计数器?例如:“已发送邮件1/10”、“已发送邮件2/10”等?

您不应该只注册一次收件人,而不是每次呼叫sendSMS。 你会收到6个祝酒词和3条短信,因为你有3个广播接收器。因此,在第一次跑步中,你会得到1片吐司。在第二次运行中,您将获得2次祝酒(第一次运行中注册的接收器被调用,第二次运行中的接收器被调用)。在第三次运行中,所有三个接收器都被调用,因此您将获得三个以上的祝酒词。总的来说-6次祝酒

所以我想,在调用sendSMS的for循环之前,您只需要注册一个接收器,或者如果您希望在sendSMS中注册,那么您必须在方法的末尾取消注册

我希望这有帮助,
干杯

我没有认真看你的代码,也没有问自己为什么会发生这种情况,但有一个诀窍可以阻止祝酒词出现两次:

创建Toast实例,在显示您调用的实例之前,先设置文本,然后调用。这将推翻之前的祝酒词。你甚至不会注意到祝酒会显示两次


这是一个愚蠢的解决办法,但对我来说很有效;-)

(我对Java/Android编程还不熟悉,所以请容忍我的条款。)你能告诉我你在谈论什么部分以及可能的修复方法吗?我不知道你在说什么。(在运行了一些快速测试之后)我相信你的回答是正确的,尽管每次我添加联系人时,它都会成倍增加。还没有完全解决它。仍在试图找出如何停止接收器的循环。噢。。只需将registerReceiver方法和BroadcastReceiver的整个实现从sendSMS方法中取出,并将其放在callStructureFire.setOnClickListener(new View.OnClickListener()之前)…这应该可以完成任务…谢谢。这很有效。如果知道我的手机10分钟内都不会醒着,那就更好了,这样我就不会不小心按下另一个按钮了。哈哈。