2013-04-22 2 views
0

ВОПРОС:Локальная переменная не может быть инициализирован

У меня есть TimePicker, который я хотел бы использовать, чтобы сохранить значение длинных/строки «минуты», которая представляет общее количество минут между током время и время, выбранное таймером.

Например: если в настоящий момент 7:30 и пользователь выбирает 8:30, это сэкономит 60 минут как значение минут.

мне удалось реализовать следующий исходный код (как показано ниже), однако, я получаю несколько ошибок, заявив:

"The local variable tp may not have been initialized" 

Используя метод, предложенный в комментариях ниже - хотя я вслед за инструкции точно.

Compiler ПРОБЛЕМЫ:

Description Resource Path Location Type 
The local variable tp may not have been initialized AddEditDevice.java  line 119 Java Problem 
The local variable tp may not have been initialized AddEditDevice.java  line 120 Java Problem 

ИСТОЧНИК:

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.ViewGroup; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.FrameLayout; 
import android.widget.TextView; 
import android.widget.TimePicker; 
import java.text.DecimalFormat; 
import android.util.Log; 
import java.util.Calendar; 

public class AddEditDevice extends Activity { 

    private long rowID; 
    private EditText nameEt; 
    private EditText capEt; 
    private EditText codeEt; 
    private TimePicker timeEt; 
    private TextView ssidTextView; 
    Calendar cal = Calendar.getInstance(); 
    TimePicker tp; 


     // @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.add_country); 
      WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
      WifiInfo info = wifi.getConnectionInfo(); 
      String ssidString = info.getSSID(); 

      if (ssidString.startsWith("\"") && ssidString.endsWith("\"")){ 
       ssidString = ssidString.substring(1, ssidString.length()-1); 
} 

      //TextView ssidTextView = (TextView) findViewById(R.id.wifiSSID); 
      ssidTextView = (TextView) findViewById(R.id.wifiSSID); 
      ssidTextView.setText(ssidString); 

      nameEt = (EditText) findViewById(R.id.nameEdit); 
      capEt = (EditText) findViewById(R.id.capEdit); 
      codeEt = (EditText) findViewById(R.id.codeEdit); 
      timeEt = (TimePicker) findViewById(R.id.timeEdit); 






      Bundle extras = getIntent().getExtras(); 

      if (extras != null) 
      { 
      rowID = extras.getLong("row_id"); 
      nameEt.setText(extras.getString("name")); 
      capEt.setText(extras.getString("cap")); 
      codeEt.setText(extras.getString("code"));  
      String time = extras.getString("time"); 
      String[] parts = time.split(":"); 
      timeEt.setCurrentHour(Integer.valueOf(parts[0])); 
      timeEt.setCurrentMinute(Integer.valueOf(parts[1])); 
      timeEt.setIs24HourView(false); 


      } 

      Button saveButton =(Button) findViewById(R.id.saveBtn); 
      saveButton.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) 
       { 
       if (nameEt.getText().length() != 0) 
       { 
        AsyncTask<Object, Object, Object> saveContactTask = 
         new AsyncTask<Object, Object, Object>() 
         { 
          @Override 
          protected Object doInBackground(Object... params) 
          { 
          saveContact(); 
          return null; 
          } 

          @Override 
          protected void onPostExecute(Object result) 
          { 
          finish(); 
          } 
         }; 

        saveContactTask.execute((Object[]) null); 
       } 

       else 
       { 
        AlertDialog.Builder alert = new AlertDialog.Builder(AddEditDevice.this); 
        alert.setTitle(R.string.errorTitle); 
        alert.setMessage(R.string.errorMessage); 
        alert.setPositiveButton(R.string.errorButton, null); 
        alert.show(); 
       } 
       } 
     });} 


     public static void main(String[] args) { 
      Calendar cal = Calendar.getInstance(); 
      TimePicker tp; 
      cal.set(Calendar.HOUR_OF_DAY, tp.getCurrentHour()); 
      cal.set(Calendar.MINUTE, tp.getCurrentMinute()); 
      long minutes = (cal.getTimeInMillis() - 
       Calendar.getInstance().getTimeInMillis())/1000/60; 
     } 



      private void saveContact() 
      { 
       DatabaseConnector dbConnector = new DatabaseConnector(this); 

       if (getIntent().getExtras() == null) 
       { 
//    Log.i("Test for Null", ""+dbConnector+" "+nameEt+" "+capEt+" "+timeEt+" "+codeEt+" "+ssidTextView); 
        dbConnector.insertContact(nameEt.getText().toString(), 
          capEt.getText().toString(), 
          timeEt.getCurrentHour().toString() + ":" 
           + timeEt.getCurrentMinute().toString(), 
          codeEt.getText().toString(), 
         ssidTextView.getText().toString()); 

       } 
       else 
       { 
       dbConnector.updateContact(rowID, 
         nameEt.getText().toString(), 
          capEt.getText().toString(), 
           timeEt.getCurrentHour().toString() + ":" 
            + timeEt.getCurrentMinute().toString(), 
           codeEt.getText().toString(), 
           ssidTextView.getText().toString()); 
       } 
      } 
} 
+0

Вы используете неинициализированное значение в своем основном методе ** (TimePicker tp; cal.set (Calendar.HOUR_OF_DAY, tp.getCurrentHour());) **. Однако: ваш первоначальный вопрос был задан и ответил. И вы не помогаете себе, вечно излагая свой первоначальный вопрос. Вы должны были отметить это как ответ и продолжить свое развитие. Впоследствии вы должны были задавать дополнительные вопросы в качестве новых вопросов, а не как постоянно меняющийся вечный вопрос. – DigCamara

+0

@DigCamara, спасибо. Srsly. –

+0

Был там. Сделал это. Не надо благодарности! – DigCamara

ответ

0

Используйте java.util.Calendar, чтобы получить текущие значения и вычитать.

Calendar cal = Calendar.getInstance(); 
TimePicker tp; 

// ... 

cal.set(Calendar.HOUR_OF_DAY, tp.getCurrentHour()); 
cal.set(Calendar.MINUTE, tp.getCurrentMinute()); 
long minutes = (cal.getTimeInMillis() - 
    Calendar.getInstance().getTimeInMillis())/1000/60; 

Редактировать: Попробуйте это консольное приложение Java. Доказательство того, что оно работает.

import java.util.Calendar; 

public class Main { 

    public static void main(String[] args) { 
     Calendar cal = Calendar.getInstance(); 

     cal.set(Calendar.HOUR_OF_DAY, 20); 
     cal.set(Calendar.MINUTE, 58); 

     long minutes = (cal.getTimeInMillis() - Calendar.getInstance().getTimeInMillis())/1000/60; 

     System.out.println(minutes); 
    } 

} 

Возвращает 4 в 20:54 моего местного времени.

+0

Я отредактировал мой источник выше - это выглядит правильно? –

+0

Да, но нет необходимости хранить объект Date в качестве члена, вы можете использовать его локально. Также я отредактировал свой ответ, чтобы разобраться с некоторыми проблемами полуночи. Вы должны обновить свой код, чтобы он соответствовал. (Эта проблема полуночи возникает, когда пользователь начинает выбирать время в 23:59 и заканчивается в 0:01). –

+0

Подождите минуту. Это правильно, но ... вы не сохраняете «минуты» в любом месте. На самом деле, вы отбрасываете его с помощью первого '}' ... :-) –

Смежные вопросы