Java 显示Toast消息&;当一段时间过去后执行一项操作

Java 显示Toast消息&;当一段时间过去后执行一项操作,java,android,Java,Android,我有一个应用程序,它可以读取一个数字文件。预定义阈值,并将文件中的每个数字与阈值逐一进行比较。当读取的数字大于阈值时,用按钮显示警报。如果按钮在2分钟内未按下,则发送sms消息。如果按钮在另外两分钟内未按下,则拨打电话 我正在努力解决的问题是计算经过的时间,并在经过一定时间后触发前面提到的两种方法之一。如何定义它以及在哪里。我见过很多使用处理程序、计时器和Runnable方法的示例,但都没有成功。当我运行应用程序时,什么也没发生 这是我迄今为止的代码,如有任何建议或想法,将不胜感激 使用处理程序

我有一个应用程序,它可以读取一个数字文件。预定义阈值,并将文件中的每个数字与阈值逐一进行比较。当读取的数字大于阈值时,用按钮显示警报。如果按钮在2分钟内未按下,则发送sms消息。如果按钮在另外两分钟内未按下,则拨打电话

我正在努力解决的问题是计算经过的时间,并在经过一定时间后触发前面提到的两种方法之一。如何定义它以及在哪里。我见过很多使用处理程序、计时器和Runnable方法的示例,但都没有成功。当我运行应用程序时,什么也没发生

这是我迄今为止的代码,如有任何建议或想法,将不胜感激

使用处理程序

private static final int MISS_LIMIT = 1000;
int misses = 0;

    final Handler handler = new Handler();
    final Runnable timer = new Runnable() {
        @Override
        public void run()
        {
            handler.postDelayed(timer, MISS_LIMIT);
            // user too late: increment miss counter
            if (++misses >= MISS_LIMIT)
            {
                //TODO miss limit reached
                Toast.makeText(MainActivity.this, "Time is passed", Toast.LENGTH_SHORT).show();
                finish(); // close this activity
            }
        }
    };
代码的其余部分:

 int Threshold = 40;

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

    File dir = Environment.getExternalStorageDirectory();


    File file = new File(dir, "/Numbers.txt");

    try
    {
       FileInputStream fin = new FileInputStream(file);

       if (fin != null)
       {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fin));
        String line ="";

        while((line= bufferedReader.readLine()) != null)
        {

          if (Integer.parseInt(line) > Threshold)
          {
             //store value in integer
             int number = Integer.parseInt(line);

             // create alert dialog
             AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                                    builder
           .setTitle("Alert !!")
           .setMessage("High Temperature !!" + "\t" + number)


           .setPositiveButton("Send SMS",new DialogInterface.OnClickListener()
            {
            public void onClick(DialogInterface dialog,int id)
              {
                // if this button is clicked, close current activity
                MainActivity.this.finish();
              }
            });


    AlertDialog alertDialog = builder.create();
                                          alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.holo_red_light);
        alertDialog.show();
         }

    }

    fin.close();

可能您可以进行以下更改以使其正常工作

假设您正在从initiateDialog方法调用对话框

    void initiateDialog(){
    //Show Alert
    //Your existing code for Dialog
    AlertDialog alertDialog = builder.create();
    alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.holo_red_light);
    alertDialog.show();
    new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    buttonNotPressedFirst();
                }
            }, FIRST_DELAY);

    }
    void buttonNotPressedFirst(){
         //SEND SMS
    new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    buttonNotPressedSecond();
                }
            }, SECOND_DELAY);
    }
    }

    void buttonNotPressedSecond(){
      //Proceed with phone call
    }

可能您可以进行以下更改以使其正常工作

假设您正在从initiateDialog方法调用对话框

    void initiateDialog(){
    //Show Alert
    //Your existing code for Dialog
    AlertDialog alertDialog = builder.create();
    alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.holo_red_light);
    alertDialog.show();
    new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    buttonNotPressedFirst();
                }
            }, FIRST_DELAY);

    }
    void buttonNotPressedFirst(){
         //SEND SMS
    new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    buttonNotPressedSecond();
                }
            }, SECOND_DELAY);
    }
    }

    void buttonNotPressedSecond(){
      //Proceed with phone call
    }

我要看一看。在
OK
按钮上单击一个布尔标志并使其为
false
。显示对话后,您可以调用两个
Handler.postDelayed()
方法,一个用于sms,另一个用于不同延迟的调用。在这两个
Runnables
中,检查布尔标志是否为true或false,如果为true,则发送短信或拨打电话,否则什么也不做。我会看一看。在
确定
按钮上单击布尔标志并使其为
false
。显示对话后,您可以调用两个
Handler.postDelayed()
方法,一个用于sms,另一个用于不同延迟的调用。在这两个
Runnables
中,检查布尔标志是否为true或false,如果为true,则发送短信或拨打电话,否则什么也不做。我应该将处理程序放在哪里?是在DialogButton.OnClickListener之间吗?因为如果对话框中的
发送Sms
按钮未按下,则发送文本,然后拨打电话。当我将处理程序放在
侦听器事件之后时,它将以红色显示
postDelayed
。显示警报的过程应完全移动到方法initiateDialog()。在alertDialog.show()之后,启动第一个处理程序。因此,当您开始显示对话框警报时,您的第一个计数器已启动。如果处理程序完成,则调用buttonNotPressedFirst()。那么如何避免在
第一次延迟
结束后从一开始启动
第二次延迟
。假设
第一次延迟
10000
。完成后,从
第一次延迟
结束的位置开始
第二次延迟
,而不是从
0
开始。无论如何,这可以实现吗?秒延迟只是一个指定毫秒延迟的数字,与第一个延迟相同。在上面的逻辑中,一旦第一个处理程序完成,那么只有第二个处理程序启动。否则,用变量和数字做一些简单的逻辑。A_10=B_3+C_7。A是B和C的和。你可以用这种方法操作。这就是逻辑。我应该把处理器放在哪里?是在DialogButton.OnClickListener之间吗?因为如果对话框中的
发送Sms
按钮未按下,则发送文本,然后拨打电话。当我将处理程序放在
侦听器事件之后时,它将以红色显示
postDelayed
。显示警报的过程应完全移动到方法initiateDialog()。在alertDialog.show()之后,启动第一个处理程序。因此,当您开始显示对话框警报时,您的第一个计数器已启动。如果处理程序完成,则调用buttonNotPressedFirst()。那么如何避免在
第一次延迟
结束后从一开始启动
第二次延迟
。假设
第一次延迟
10000
。完成后,从
第一次延迟
结束的位置开始
第二次延迟
,而不是从
0
开始。无论如何,这可以实现吗?秒延迟只是一个指定毫秒延迟的数字,与第一个延迟相同。在上面的逻辑中,一旦第一个处理程序完成,那么只有第二个处理程序启动。否则,用变量和数字做一些简单的逻辑。A_10=B_3+C_7。A是B和C的和。你可以用这种方法操作。这就是逻辑。