2013-04-22 8 views
0

문제 :지역 변수는 초기화되지 않았을 수 있습니다

I가 내가 현재 사이 분의 총 수를 나타내는 긴/문자열 "분"의 값을 저장하는 데 사용하고 싶은 TimePicker timepicker에 의해 선택된 시간 및 시간.

예 : 현재 7:30이고 사용자가 8:30을 선택하면 60 분을 분으로 저장합니다. - 나는 다음있어 비록

"The local variable tp may not have been initialized" 

을 아래 코멘트에 제안 된 방법을 사용하여 :

나는 그러나 나는 내용의 몇 가지 오류를 받고 있어요 (아래 그림 참조) 다음과 같은 소스 코드를 구현하기 위해 관리했습니다 지시 사항.

컴파일러에 문제가 :

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; 

편집이 자바 콘솔 응용 프로그램을 사용해보십시오. 그것이 작동한다는 증거.

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); 
    } 

} 

반환 내 로컬 시간의 20:54에서 4.

+0

위의 소스를 편집했습니다. 올바른 것으로 보입니까? –

+0

예, Date 객체를 멤버로 유지할 필요는 없지만 로컬로 사용할 수 있습니다. 또한 일부 자정 문제를 해결하기 위해 내 대답을 편집했습니다. 코드와 일치하도록 코드를 업데이트해야합니다. (이 자정 문제는 사용자가 23:59에 시간을 시작하고 0:01에 완료 될 때 발생합니다.) –

+0

잠시 기다려주십시오. 맞아. 근데 어디서나 '분'을 구하지는 마라. 사실, 당신은 첫 번째'}'...와 함께 버립니다. :-) –

관련 문제