0

だから...私は、ユーザーがTimePickerボタンから時間を設定したときに時間値を保存する小さなアプリを構築しています。Android TimePicker には currentHour と currentMinute の 2 つの値があるため、2 つの文字列 (時間用に 1 つ、分用に 1 つ) を作成し、それらを連結して時間値として表示できる単一の文字列にする必要があると考えます。

シンプルですね。

今のところ、私は以下のソースを思いつきました.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 ボタンは (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();
               }
}
4

1 に答える 1

0

コードにはかなりの問題があります。

まず、時間と分に個別の TimePicker ウィジェットは必要ありません。そのため、コードとレイアウト ファイルからminEtを削除してください。

次に、timePicker変数がクラスで宣言されていません。代わりにtimeEtを使用してください。

第三に、クラスでminEdit変数を見つけることができませんでした。レイアウトで宣言されている場合、コンパイラは文句を言うべきではありません。とにかく、必要ないので削除してください。

TimePicker を使用した実際の例を見たいと思うかもしれません。これをチェックしてください。

サンプル アクティビティ:

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);
    }   
}
于 2013-03-25T04:28:27.377 に答える