2013-03-25 85 views
0

所以...我正在構建一個小應用程序,當用戶從TimePicker按鈕設置一個時間值時存儲時間值。由於android的TimePicker有兩個值currentHour和currentMinute我想我需要創建兩個字符串(一個小時一分鐘),然後concatonate他們到一個單一的字符串,可以顯示爲一個時間值。試圖在java中創建一個簡單的時鐘(ISH)應用程序 - 似乎無法做到這一點

很簡單吧?

截至目前我已經想出了下面的源 - 我覺得我幾乎都連接到該串的時間值TimePicker但是我有3個問題:

timePicker cannot be resolved AddEditCountry.java line 104 
minEdit cannot be resolved or is not a field AddEditCountry.java line 37 
timePicker cannot be resolved AddEditCountry.java line 103  

...更不用說TimePicker按鈕不會更改(combined currentHour和currentMinute)字符串。

^- 大問題

AddEditCountry.java 


import android.app.Activity; 
import android.app.AlertDialog; 
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.TimePicker; 

public class AddEditCountry extends Activity { 

    private long rowID; 
    private EditText nameEt; 
    private EditText capEt; 
    private EditText codeEt; 
    private TimePicker timeEt; 
    private TimePicker minEt; 
    public static final String KEY_BUNDLE_TIME = "time"; 
    public static final String KEY_BUNDLE_MIN = "min"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.add_country); 

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


      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")); 
      timeEt.setCurrentHour(extras.containsKey(KEY_BUNDLE_TIME) ? extras.getInt(KEY_BUNDLE_TIME) : 0); 
      minEt.setCurrentMinute(extras.getInt("min")); 
      } 

      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(AddEditCountry.this); 
        alert.setTitle(R.string.errorTitle); 
        alert.setMessage(R.string.errorMessage); 
        alert.setPositiveButton(R.string.errorButton, null); 
        alert.show(); 
       } 
       } 
     }); 
     } 


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

       if (getIntent().getExtras() == null) 
       { 
        dbConnector.insertContact(nameEt.getText().toString(), 
          capEt.getText().toString(), 
          timeEt.getCurrentHour().toString(), 
          minEt.getCurrentMinute().toString(), 
          codeEt.getText().toString(), 
          timePicker.getCurrentHour().toString(), 
          timePicker.getCurrentMinute().toString()); 

       } 
       else 
       { 
       dbConnector.updateContact(rowID, 
        nameEt.getText().toString(), 
        capEt.getText().toString(), 
        timeEt.getCurrentHour().toString(), 
        minEt.getCurrentMinute().toString(),/* Storing as String*/ 
        codeEt.getText().toString()); 
       } 
      } 
} 



DatabaseConnector.java 




import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 



public class DatabaseConnector { 

    public static final String KEY_BUNDLE_TIME = "time"; 
    public static final String KEY_BUNDLE_MIN = "min"; 
    private static final String DB_NAME = "WorldCountries"; 
    private SQLiteDatabase database; 
    private DatabaseOpenHelper dbOpenHelper; 

    public DatabaseConnector(Context context) { 
     dbOpenHelper = new DatabaseOpenHelper(context, DB_NAME, null, 1); 
    } 

     public void open() throws SQLException 
     { 
      //open database in reading/writing mode 
      database = dbOpenHelper.getWritableDatabase(); 
     } 

     public void close() 
     { 
      if (database != null) 
      database.close(); 
     }  

     public void insertContact(String name, String cap, String code, String time, String min) 
       { 
        ContentValues newCon = new ContentValues(); 
        newCon.put("name", name); 
        newCon.put("cap", cap); 
        newCon.put("time", time); 
        newCon.put("min", min); 
        newCon.put("code", code); 
        newCon.put(AddEditCountry.KEY_BUNDLE_TIME, time); 
        newCon.put(AddEditCountry.KEY_BUNDLE_MIN, min); 

        open(); 
        database.insert("country", null, newCon); 
        close(); 
       } 


       public void updateContact(long id, String name, String cap,String code, String time, String min) 
       { 
        ContentValues editCon = new ContentValues(); 
        editCon.put("name", name); 
        editCon.put("cap", cap); 
        editCon.put("time", time); 
        editCon.put("min", min); 
        editCon.put("code", code); 
        editCon.put(AddEditCountry.KEY_BUNDLE_TIME, time); 
        editCon.put(AddEditCountry.KEY_BUNDLE_MIN, min); 
        open(); 
        database.update("country", editCon, "_id=" + id, null); 
        close(); 
       } 


       public Cursor getAllContacts() 
       { 
        return database.query("country", new String[] {"_id", "name"}, 
        null, null, null, null, "name"); 
       } 

       public Cursor getOneContact(long id) 
       { 
        return database.query("country", null, "_id=" + id, null, null, null, null); 
       } 

       public void deleteContact(long id) 
       { 
        open(); 
        database.delete("country", "_id=" + id, null); 
        close(); 
       } 
} 
+0

的[方法的setText(字符串)是未定義TimePicker]可能重複(http://stackoverflow.com/questions/15592471/the-method-settextstring-is -undefined-for-timepicker) – Pragnani 2013-03-25 04:24:38

回答

0

有代碼相當多的問題。

首先,您不需要單獨的TimePicker小部件小時和分鐘。因此,從您的代碼以及佈局文件中刪除minEt

二,timePicker變量未在類中聲明。改爲使用timeEt

第三,我找不到在類minEdit變量,如果它在佈局中聲明,則編譯器不應該抱怨。無論如何刪除它,因爲你不需要它。

您可能想看看使用TimePicker的工作示例。檢查this了。

樣品活動

public class TimePickerActivity extends Activity { 

    public static final int DIALOG_TIME = 100; 
    private TextView timeText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     timeText = new TextView(this); 
     setContentView(timeText); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     showDialog(DIALOG_TIME); 
    } 

    @Override 
    protected Dialog onCreateDialog(final int id) { 
     switch(id) { 
     case DIALOG_TIME: 
      Calendar cal = Calendar.getInstance(); 
      TimePickerDialog.OnTimeSetListener mTimeSetListener = 
       new TimePickerDialog.OnTimeSetListener() { 
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
         timeText.setText(hourOfDay+":"+minute); 
        } 
       }; 
      return new TimePickerDialog(this, mTimeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true); 
     } 
     return super.onCreateDialog(id); 
    } 
} 
+0

我試圖從本教程實現一個... http://www.lukehorvat.com/blog/android-time-picker-example/ 但我仍然有麻煩 (你想看看我已經構建的源代碼,結合了教程中的代碼?) – NoobNinja 2013-03-25 06:54:03

+0

我提供了一個簡單的例子,可以幫助您的方案。你當然可以通過點擊一個按鈕來啓動TimePicker對話框。 – appsroxcom 2013-03-25 07:17:56

相關問題