javascript - 我认为 BroadcastReceiver 会自行重置,我需要它在不重置的情况下运行

标签 javascript java android broadcastreceiver android-broadcastreceiver

我明天有很多作业,但我只完成了一件事。基本上我需要做的是计算传入我手机的短信数量。例如,如果有人向我发送一条短信,上面写着“A”,程序会对其进行计数,并弹出一条提示消息:“Answer A”:1,当另一条短信到来时,它将显示“Answer A”:2。我做了一些代码工作,但即使我发送了 20 条“A”短信,它也显示为 1。我认为它会在计算第​​一条短信后自行重置。这是我的代码。

public class SmsAlici extends BroadcastReceiver {
   public int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;
    public int toplam = 0;


    @Override
    public void onReceive(Context context, Intent intent)

    {
            SmsMessage[] mesaj = Telephony.Sms.Intents.getMessagesFromIntent(intent);
            SmsMessage sms = mesaj[0];
            String gonderen = sms.getOriginatingAddress();
            String sms_icerik = sms.getMessageBody();


            sms_icerik = sms_icerik.trim();


            if (sms_icerik.equalsIgnoreCase("A")) {
                sayacA++;
                toplam++;
                Toast.makeText(context, "A Cevabı:" + Integer.toString(sayacA), Toast.LENGTH_LONG).show();

            } else if (sms_icerik.equalsIgnoreCase("B")) {
                sayacB++;
                toplam++;
                Toast.makeText(context, "B Cevabı:" + Integer.toString(sayacB), Toast.LENGTH_LONG).show();
            } else if (sms_icerik.equalsIgnoreCase("C")) {
                sayacC++;
                toplam++;
                Toast.makeText(context, "C Cevabı:" + Integer.toString(sayacC), Toast.LENGTH_LONG).show();

            } else if (sms_icerik.equalsIgnoreCase("D")) {
                sayacD++;
                toplam++;
                Toast.makeText(context, "D Cevabı: " + Integer.toString(sayacD), Toast.LENGTH_LONG).show();


            }


            if (toplam == 20) {
                Toast.makeText(context, "A Cevabı Toplamı: " + Integer.toString(sayacA), Toast.LENGTH_LONG).show();
                Toast.makeText(context, "B Cevabı Toplamı: " + Integer.toString(sayacB), Toast.LENGTH_LONG).show();
                Toast.makeText(context, "C Cevabı Toplamı: " + Integer.toString(sayacC), Toast.LENGTH_LONG).show();
                Toast.makeText(context, "D Cevabı Toplamı: " + Integer.toString(sayacD), Toast.LENGTH_LONG).show();
                toplam = 0;

最佳答案

在您收到每条短信后,Android 可能会实例化您的类的一个新实例。

更改:

public int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;

至:

public static int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;

但是,最好的解决方案是将这些值保留在 SharedPreferences 上。这样,您就可以防止应用程序被终止时丢失数据。

看看:SharedPreferences

关于javascript - 我认为 BroadcastReceiver 会自行重置,我需要它在不重置的情况下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602282/

相关文章:

android - 删除在开发 Android 中安装新版本应用程序时的共享首选项

javascript - 如何使用 CSS 创建马蹄形仪表

javascript - 元素未完全全屏显示

javascript - 如何使用 jquery.html 在 div 中插入 html 代码

java - 使用 java servlet 和 Netbeans 从 Oracle 数据库查询数据

java - 将图像拖放到Jpanel中并将其放入应用程序目录中

javascript - Jquery slider 。分钟两位数

java - 是否可以有多个 xmlRootElement?

android - 为什么我的 Android 项目中的 Eclipse 未检测到我的 Galaxy Nexus?

java - 我可以在 IntelliJ IDEA 或 Atom IDE 中使用 Google Mobile Vision API 吗?