2014-01-28 60 views
0

我遇到的問題是我想接收用戶輸入來比較用戶通過提交按鈕和datepicker,timepicker和numberpick輸入和提交的計劃日期和時間(幾秒鐘)。比較日曆參數與Android時空指針時間參數

然後,當用戶按下提交時,該信息將被設置到日曆對象中,並且應用程序始終循環IOIOlooper以檢查是否應調用事件(例如打開引腳以打開指示燈)。 ..

任何問題,疑慮或澄清需要請隨時告訴我。

*編輯:此外,應用程序立即崩潰,並在logcat中產生一個空指針錯誤。

謝謝你們;

主要活動這種活性是該方案的主要活性,它是運行應用程序啓動時,它是IOIOActivity的延伸用於與IOIO板接口:

now = new Time(); 
    eventCalendar = eventCalendar.getInstance(); 
    eventCalendar.set(0,0,0,0,0,0); 
    submitEvent = (Button) findViewById(R.id.submit); 


    // Wakelock 
    PowerManager powerManageDevice = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLockDevice = powerManageDevice.newWakeLock(
      PowerManager.FULL_WAKE_LOCK, "Wakelocking the Scheduler"); 
    super.onCreate(savedInstanceState); 
    wakeLockDevice.acquire(); 
    setContentView(R.layout.activity_main); 

    chooseDay = (DatePicker) findViewById(R.id.datepicker1); 
    chooseTime = (TimePicker) findViewById(R.id.timepicker1); 

    togglePin = (ToggleButton) findViewById(R.id.ledtoggle); 
    chosePin1 = (NumberPicker) findViewById(R.id.pinpick1); 
    chosePin1.setMaxValue(46); 
    chosePin1.setMinValue(1); 

    chosePin2 = (NumberPicker) findViewById(R.id.pinpick2); 
    chosePin2.setMaxValue(46); 
    chosePin2.setMinValue(1); 

    chosePin3 = (NumberPicker) findViewById(R.id.pinpick3); 
    chosePin3.setMaxValue(46); 
    chosePin3.setMinValue(1); 

    chosePin4 = (NumberPicker) findViewById(R.id.pinpick4); 
    chosePin4.setMaxValue(46); 
    chosePin4.setMinValue(1); 

    chosePin5 = (NumberPicker) findViewById(R.id.pinpick5); 
    chosePin5.setMaxValue(46); 
    chosePin5.setMinValue(1); 

    chosePin6 = (NumberPicker) findViewById(R.id.pinpick6); 
    chosePin6.setMaxValue(46); 
    chosePin6.setMinValue(1); 

    chosePin7 = (NumberPicker) findViewById(R.id.pinpick7); 
    chosePin7.setMaxValue(46); 
    chosePin7.setMinValue(1); 

    chosePin8 = (NumberPicker) findViewById(R.id.pinpick8); 
    chosePin8.setMaxValue(46); 
    chosePin8.setMinValue(1); 

    chosePin9 = (NumberPicker) findViewById(R.id.pinpick9); 
    chosePin9.setMaxValue(46); 
    chosePin9.setMinValue(1); 

    secondPicker = (NumberPicker) findViewById(R.id.secondPicker); 
    secondPicker.setMaxValue(59); 
    secondPicker.setMinValue(0); 

    submitEvent.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      eventCalendar.set(chooseDay.getYear(), chooseDay.getMonth(), chooseDay.getDayOfMonth(), chooseTime.getCurrentHour(), chooseTime.getCurrentMinute(), secondPicker.getValue()); 
     } 
    }); 

內部類:

class Looper extends BaseIOIOLooper { 
    /** The on-board LED. */ 
    private DigitalOutput led_; 
    private DigitalOutput pin1PWM; 
    private DigitalOutput pin2PWM; 
    private DigitalOutput pin3PWM; 
    private DigitalOutput pin4PWM; 
    private DigitalOutput pin5PWM; 
    private DigitalOutput pin6PWM; 
    private DigitalOutput pin7PWM; 
    private DigitalOutput pin10PWM; 
    private DigitalOutput pin11PWM; 
    private DigitalOutput pin12PWM; 
    private DigitalOutput pin13PWM; 
    private DigitalOutput pin14PWM; 
    private DigitalOutput pin27PWM; 
    private DigitalOutput pin28PWM; 
    private DigitalOutput pin34PWM; 
    private DigitalOutput pin35PWM; 
    private DigitalOutput pin36PWM; 
    private DigitalOutput pin37PWM; 
    private DigitalOutput pin38PWM; 
    private DigitalOutput pin39PWM; 
    private DigitalOutput pin40PWM; 

    /** 
    * private DigitalOutput pin1; private DigitalOutput pin2; private 
    * DigitalOutput pin3; private DigitalOutput pin4; private DigitalOutput 
    * pin5; private DigitalOutput pin6; private DigitalOutput pin7; 
    */ 
    private DigitalOutput pin8; 
    private DigitalOutput pin9; 
    /** 
    * private DigitalOutput pin10; private DigitalOutput pin11; private 
    * DigitalOutput pin12; private DigitalOutput pin13; private 
    * DigitalOutput pin14; 
    */ 
    private DigitalOutput pin15; 
    private DigitalOutput pin16; 
    private DigitalOutput pin17; 
    private DigitalOutput pin18; 
    private DigitalOutput pin19; 
    private DigitalOutput pin20; 
    private DigitalOutput pin21; 
    private DigitalOutput pin22; 
    private DigitalOutput pin23; 
    private DigitalOutput pin24; 
    private DigitalOutput pin25; 
    private DigitalOutput pin26; 
    // private DigitalOutput pin27; 
    // private DigitalOutput pin28; 
    private DigitalOutput pin29; 
    private DigitalOutput pin30; 
    private DigitalOutput pin31; 
    private DigitalOutput pin32; 
    private DigitalOutput pin33; 
    /** 
    * private DigitalOutput pin34; private DigitalOutput pin35; private 
    * DigitalOutput pin36; private DigitalOutput pin37; private 
    * DigitalOutput pin38; private DigitalOutput pin39; private 
    * DigitalOutput pin40; 
    */ 
    private DigitalOutput pin41; 
    private DigitalOutput pin42; 
    private DigitalOutput pin43; 
    private DigitalOutput pin44; 
    private DigitalOutput pin45; 
    private DigitalOutput pin46; 


    private DigitalOutput[] pinDigArray = { pin1PWM, pin2PWM, pin3PWM, 
      pin4PWM, pin5PWM, pin6PWM, pin7PWM, pin8, pin9, pin10PWM, 
      pin11PWM, pin12PWM, pin13PWM, pin14PWM, pin15, pin16, pin17, 
      pin18, pin19, pin20, pin21, pin22, pin23, pin24, pin25, pin26, 
      pin27PWM, pin28PWM, pin29, pin30, pin31, pin32, pin33, 
      pin34PWM, pin35PWM, pin36PWM, pin37PWM, pin38PWM, pin39PWM, 
      pin40PWM, pin41, pin42, pin43, pin44, pin45, pin46 }; 

    /** 
    * Called every time a connection with IOIO has been established. 
    * Typically used to open pins. 
    * 
    * @throws ConnectionLostException 
    *    When IOIO connection is lost. 
    * 
    * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#setup() 
    */ 
    @Override 
    protected void setup() throws ConnectionLostException { 
     led_ = ioio_.openDigitalOutput(0, true); 

     for (int i = 0; i < pinDigArray.length; i++) { 
      pinDigArray[i] = ioio_.openDigitalOutput(i + 1, false); 
     } 
    } 

    /** 
    * Called repetitively while the IOIO is connected. 
    * 
    * @throws ConnectionLostException 
    *    When IOIO connection is lost. 
    * 
    * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop() 
    */ 
    @Override 
    public void loop() throws ConnectionLostException { 
     now.setToNow(); 


     led_.write(!togglePin.isChecked()); 
     try { 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
     } 

     for (int i = 0; i < pinDigArray.length; i++) { 

      if (chosePin1.getValue() == i + 1) { 
       if(now.monthDay == eventCalendar.DAY_OF_MONTH) 
       pinDigArray[i].write(true); 
      } else { 
       pinDigArray[i].write(false); 
      } 

     } 
    } 
} 

/** 
* A method to create our IOIO thread. 
* 
* @see ioio.lib.util.AbstractIOIOActivity#createIOIOThread() 
*/ 
@Override 
protected IOIOLooper createIOIOLooper() { 
    return new Looper(); 
} 

試了一下編輯工作這樣:

public void loop() throws ConnectionLostException { 
     now.setToNow(); 

     led_.write(!togglePin.isChecked()); 
     try { 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
     } 

     for (int i = 0; i < pinDigArray.length; i++) { 

      if (chosePin1.getValue() == i + 1) { 
       if(now.compare(now, eventTime) == 0) 

       pinDigArray[i].write(true); 
      } else { 
       pinDigArray[i].write(false); 
      } 

     } 

我改變了日曆到另一個計時器對象,並試圖只比較這兩個值。我將eventTime對象實例化爲全0。

* 3rd編輯:我也完全刪除了條件語句,它仍然崩潰;我不認爲循環/檢查語句是什麼造成這個問題。

我得到一個:Java運行時異常:無法啓動活動ComponentInfo

解決它:

我只是在頂部這裏刪除所有零的實例: eventCalendar.set(0, 0,0,0,0,0);

也; Time.compare(now,eventTime)== 0是更好的比較。

回答

0

if(now.monthDay == eventCalendar.DAY_OF_MONTH)是您的問題。

eventCalendar.DAY_OF_MONTH總是等於5,因爲它是一個常數。你想這樣做:if(now.monthDay == eventCalendar.get(Calendar.DAY_OF_MONTH))

+0

編輯我的問題;一秒 – Tukajo