-5

私のコードは、解析できない日付があると言っていますが、それを見つけることができません。誰か助けてもらえますか?

public class TaskReminderActivity extends ListActivity 
{
private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;
private static final int START_PICKER_DIALOG = 1;
private static final int END_PICKER_DIALOG = 2;

//Date Time Format
private static final String DATE_FORMAT = "yyyy-MM-dd"; 
private static final String TIME_FORMAT = "kk:mm";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd kk:mm:ss";

private RemindersDbAdapter mDbHelper;
private EditText mName;
private Button mSend;
final Context context = this;
private String inputName;
private String inputPassword;
private Editable editName;
private Editable editPassword;
private Calendar mCalendar; 
private Calendar mCalendarEnd;
private Button mStartTimeButton;
private Button mEndTimeButton;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.reminder_list);
    StrictMode.ThreadPolicy policy = new     StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    mName = (EditText) findViewById(R.id.user_name);
    mSend = (Button) findViewById(R.id.send);
    mStartTimeButton = (Button) findViewById(R.id.main_startTime);
    mEndTimeButton = (Button) findViewById(R.id.main_endTime);

    mDbHelper = new RemindersDbAdapter(this);
    mCalendar = Calendar.getInstance();
    mCalendarEnd = Calendar.getInstance();

    //Code to increase size of buttons

    mDbHelper.open();
    fillData();
    registerForContextMenu(getListView());
    registerButtonListeners();

 }

@Override
protected Dialog onCreateDialog(int id) {
    switch(id) {
        case START_PICKER_DIALOG: 
            return startTimePicker();
        case END_PICKER_DIALOG: 
            return endTimePicker();
    }
    return super.onCreateDialog(id);
}

//Code for Picking start and end time
private TimePickerDialog startTimePicker() {

    TimePickerDialog timePicker = new TimePickerDialog(this, new   TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
            mCalendar.set(Calendar.MINUTE, minute); 
            updateStartTimeButtonText(); 
        }
    }, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE),   true); 

    return timePicker; 
}

 private TimePickerDialog endTimePicker() {

TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            mCalendarEnd.set(Calendar.HOUR_OF_DAY, hourOfDay);
            mCalendarEnd.set(Calendar.MINUTE, minute); 
            updateEndTimeButtonText(); 
        }
    }, mCalendarEnd.get(Calendar.HOUR_OF_DAY), mCalendarEnd.get(Calendar.MINUTE), true); 

return timePicker; 
}

private void registerButtonListeners() 
{
    //Time Listeners
    mStartTimeButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(START_PICKER_DIALOG); 
        }
    });

    mEndTimeButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(END_PICKER_DIALOG); 
        }
    });

    // add button listener
            mSend.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {

                    // get prompts.xml view
                    LayoutInflater li = LayoutInflater.from(context);
                    View promptsView = li.inflate(R.layout.prompts,     null);

                    AlertDialog.Builder alertDialogBuilder = new     AlertDialog.Builder(
                            context);

                    // set prompts.xml to alertdialog builder
                    alertDialogBuilder.setView(promptsView);

                    final EditText userInput = (EditText) promptsView
                                .findViewById(R.id.usernameTextDialogUserInput);

                    final EditText passwordInput = (EditText) promptsView
                            .findViewById(R.id.passwordTextDialogUserInput);

                    // set dialog message
                    alertDialogBuilder
                        .setCancelable(false)
                        .setPositiveButton("OK",
                          new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                            // get user input and set it to result
                            // edit text
                                FileWrite();

                                editName = userInput.getText();
                                editPassword =   passwordInput.getText();

                                inputName = editName.toString();
                                inputPassword = editPassword.toString();

                                Mailing(inputName, inputPassword);
                            }
                          })
                        .setNegativeButton("Cancel",
                          new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                            dialog.cancel();
                            }
                          });

                    // create alert dialog
                    AlertDialog alertDialog = alertDialogBuilder.create();

                    // show it
                    alertDialog.show();

                }
            });

            updateStartTimeButtonText();
            updateEndTimeButtonText();
}

//Code for updating time buttons
private void updateStartTimeButtonText() {
    // Set the time button text based upon the value from the database
    SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT); 
    String timeForButton = timeFormat.format(mCalendar.getTime()); 

    mStartTimeButton.setText(timeForButton);
}

private void updateEndTimeButtonText() {
    // Set the time button text based upon the value from the database
    SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT); 
    String timeForButton = timeFormat.format(mCalendarEnd.getTime());

    mEndTimeButton.setText(timeForButton);
}

private void fillData() 
{
    Cursor remindersCursor = mDbHelper.fetchAllReminders();
    startManagingCursor(remindersCursor);


    // Create an array to specify the fields we want to display in the list (only   TITLE)
    String[] from = new String[]{RemindersDbAdapter.KEY_TITLE};

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{R.id.text1};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter reminders = 
            new SimpleCursorAdapter(this, R.layout.reminder_row, remindersCursor, from, to);
    setListAdapter(reminders);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.list_menu, menu); 
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
    case R.id.menu_insert: 
        createReminder();
        return true; 
    case R.id.menu_settings: 
        Intent i = new Intent(this, TaskPreferences.class); 
        startActivity(i); 
        return true;
    }

    return super.onMenuItemSelected(featureId, item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater mi = getMenuInflater(); 
    mi.inflate(R.menu.list_menu_item_longpress, menu); 
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.menu_delete:
            AdapterContextMenuInfo info = (AdapterContextMenuInfo)   item.getMenuInfo();
            mDbHelper.deleteReminder(info.id);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}

private void createReminder() {
    Intent i = new Intent(this, ReminderEditActivity.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Intent i = new Intent(this, ReminderEditActivity.class);
    i.putExtra(RemindersDbAdapter.KEY_ROWID, id);
    startActivityForResult(i, ACTIVITY_EDIT); 
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    fillData();
}

  //Prepares the email to be sent
public void Mailing(String inputName, String inputPassword)
{
    Mail m = new Mail(inputName, inputPassword); 

    String[] toArr = {"brittany@schoellersinc.com"}; 
    m.setTo(toArr); 
    m.setFrom(inputName); 
    m.setSubject("Daily Time Card"); 
    m.setBody(""); 

    try { 
      m.addAttachment(Environment.getExternalStorageDirectory().toString() + "/test"); 

      if(m.send()) 
      { 
        Toast.makeText(TaskReminderActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show(); 
      }

    } catch(Exception e) { 
      Toast.makeText(TaskReminderActivity.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
      Toast.makeText(TaskReminderActivity.this, "Value of User Name is " + inputName, Toast.LENGTH_LONG).show();
      Toast.makeText(TaskReminderActivity.this, "Value of Password is " + inputPassword, Toast.LENGTH_LONG).show();
      Toast.makeText(TaskReminderActivity.this, "Value of Attachment is " +   Environment.getExternalStorageDirectory().toString() + "/test.txt", Toast.LENGTH_LONG).show();
      Log.e("MailApp", "Could not send email", e); 
    } 
}

public void FileWrite()
{
    Cursor remindersCursor = mDbHelper.fetchAllReminders();
    startManagingCursor(remindersCursor);

    try 
    { // catches IOException below
        String[] from = new String[]{RemindersDbAdapter.KEY_TITLE};
        final String TESTSTRING = new String(RemindersDbAdapter.KEY_TITLE + "   ");
        File sdCard = Environment.getExternalStorageDirectory();
        File myFile = new File(sdCard, "test");
        FileWriter writer = new FileWriter(myFile);
        writer.append(showEvents(remindersCursor));
        writer.flush();
        writer.close();


        Toast.makeText(TaskReminderActivity.this, "Program Successfully went through FileWrite!", Toast.LENGTH_LONG).show();
    } catch(Exception e) 
    { 
          Toast.makeText(TaskReminderActivity.this, "Had Problems with file!", Toast.LENGTH_LONG).show();
          Log.e("FileWrite", "Had Problems with file!", e); 
    }
}

private StringBuilder showEvents(Cursor cursor) throws ParseException 
{

    Editable EditName = mName.getText();
    String Name = EditName.toString();
    SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
    SimpleDateFormat TimeFormat = new SimpleDateFormat(TIME_FORMAT);
    SimpleDateFormat DateFormat = new SimpleDateFormat(DATE_FORMAT);

    Date startTimer;
    Date endTimer;
    Date timeConverter;
    long totalBillable = 0;
    long hours;
    long minutes;
    String thisBill;
    String dateTimeString;
    String startString;
    String endString;
    boolean Lunch = false;

    StringBuilder ret = new StringBuilder(Name + "'s Time Card:\n\n");

    dateTimeString = DateFormat.format(mCalendar.getTime());
    startString = TimeFormat.format(mCalendar.getTime());
    endString = TimeFormat.format(mCalendarEnd.getTime());

    Toast.makeText(TaskReminderActivity.this, "startString = " + startString, Toast.LENGTH_LONG).show();
    Toast.makeText(TaskReminderActivity.this, "endString = " + endString, Toast.LENGTH_LONG).show();

    ret.append("Today's Date: " + dateTimeString + "\n");
    ret.append("Start Time: " + startString + "\n");
    ret.append("Finish Time: " + endString + "\n\n");

    cursor.moveToPosition(-1);
    //loop for lunch
    while (cursor.moveToNext())
    {


        if(cursor.getString(1).equals("lunch") ||   cursor.getString(1).equals("Lunch") || cursor.getString(1).equals("LUNCH"))
        {
            Lunch = true;
        }
        else
        {
            Lunch = false;
        }

    }

    cursor.moveToPosition(-1);

    //Find the payable hours.
    startTimer = mCalendar.getTime();
    endTimer = mCalendarEnd.getTime();  

    //Condition to see what payable hours is with lunch break
    if(Lunch == false)
    {
        totalBillable += endTimer.getTime() - startTimer.getTime();

        totalBillable = (totalBillable/1000);
        hours = (totalBillable/3600);
        minutes = (totalBillable/60);
        totalBillable = totalBillable - (hours * 3600);
        minutes = totalBillable / 60;
        thisBill = ("Total Payable Hours: " + hours + " hours "  + minutes + " minutes");
        ret.append(thisBill + "\n");
    }
    else
    {
        totalBillable += endTimer.getTime() - startTimer.getTime();

        totalBillable = ((totalBillable-1800000)/1000);
        hours = (totalBillable/3600);
        minutes = (totalBillable/60);
        totalBillable = totalBillable - (hours * 3600);
        minutes = totalBillable / 60;
        thisBill = ("Total Payable Hours: " + hours + " hours "  + minutes + " minutes");
        ret.append(thisBill + "\n");
    }

    cursor.moveToPosition(-1);

    //Loop for calculating total billable
    while (cursor.moveToNext()) 
    {   
        if(cursor.getString(1).equals("lunch") ||    cursor.getString(1).equals("Lunch") || cursor.getString(1).equals("LUNCH") || cursor.getString(1).equals("shop") || cursor.getString(1).equals("SHOP") || cursor.getString(1).equals("Shop"))
        {

        }
        else
        {
            try
            {
                String dateString = cursor.getString(6); 
                startTimer = TimeFormat.parse(dateString); 

                //Code for End Time
                String endDateString = cursor.getString(7); 
                endTimer = TimeFormat.parse(endDateString);

                totalBillable += endTimer.getTime() - startTimer.getTime();           

            }catch (ParseException e) {
                Log.e("ReminderEditActivity", e.getMessage(), e);
            }   
        }


    }

    totalBillable = (totalBillable/1000);
    hours = (totalBillable/3600);
    minutes = (totalBillable/60);
    totalBillable = totalBillable - (hours * 3600);
    minutes = totalBillable / 60;
    thisBill = ("Total Billable Hours: " + hours + " hours "  + minutes + " minutes");
    ret.append(thisBill + "\n\n");

    //Enters the main entries into the file
    cursor.moveToPosition(-1);
    ret.append("Customer Name   " + "Customer Number    " + "Job Number " +     "Preparation Time   " + "Travel Time    " + "Start Time " + "End Time   " + "Billed Time    " + "Job Completed  \n");
    while (cursor.moveToNext()) 
    {

      String title = cursor.getString(1);
      String customer = cursor.getString(2);
      String job = cursor.getString(3);
      String prepare = cursor.getString(4);
      String travel = cursor.getString(5);
      String dateTime = cursor.getString(6);
      String endTime = cursor.getString(7);
      String billed = cursor.getString(8);
      String completed = cursor.getString(9);

      //Loop to make file more readable
      if(completed.equals("1"))
      {
          completed = "Yes";
      }
      else
      {
          completed = "No";
      }

      ret.append(title + "  " + customer + "    " + job + " " + prepare + " " +       travel + "    " + dateTime + "    " + endTime + " " + billed + "  " + completed + "       " + "\n");
    }
    return ret;
  }
 }`

ログ:

08-15 15:41:37.070: E/ReminderEditActivity(582): Unparseable date: "2012-07-02 14:17:25" (at offset 4)
08-15 15:41:37.070: E/ReminderEditActivity(582): java.text.ParseException: Unparseable date: "2012-07-02 14:17:25" (at offset 4)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at java.text.DateFormat.parse(DateFormat.java:626)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.dummies.android.TaskReminder.TaskReminderActivity.showEvents(TaskReminderActivity.java:464)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.dummies.android.TaskReminder.TaskReminderActivity.FileWrite(TaskReminderActivity.java:354)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.dummies.android.TaskReminder.TaskReminderActivity$5$1.onClick(TaskReminderActivity.java:186)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at android.os.Looper.loop(Looper.java:137)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at android.app.ActivityThread.main(ActivityThread.java:4424)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at java.lang.reflect.Method.invokeNative(Native Method)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at java.lang.reflect.Method.invoke(Method.java:511)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-15 15:41:37.070: E/ReminderEditActivity(582):    at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

0

このコードブロックを見てください...

try
{
    String dateString = cursor.getString(6); 
    startTimer = TimeFormat.parse(dateString); 

    //Code for End Time
    String endDateString = cursor.getString(7); 
    endTimer = TimeFormat.parse(endDateString);

    totalBillable += endTimer.getTime() - startTimer.getTime();           

}catch (ParseException e) {
    Log.e("ReminderEditActivity", e.getMessage(), e);
}

あなたの質問には非常に多くの投稿があるため、確信が持てませんが、dateTimeFormat代わりにTimeFormat?

于 2012-08-15T16:18:08.690 に答える
0

「コードの 519 行のみ」をダンプし、コードのどの行が例外を発生させているかをわざわざ指摘することさえせずに、あなたの質問に答える助けにはなりません。

また、Java の命名規則では、データ メンバーとローカル変数に先頭の大文字を付けません。TimeFormatクラス名のように見えて、私たちのような人が「わずか 519 行のコード」を理解するのを難しくしています。

そうは言っても、TimeFormatは に基づいてkk:mmおり、データ ( 2012-07-02 14:17:25) はその形式ではありません。を使用すべきではないかTimeFormat、データベースのデータが間違っています。

于 2012-08-15T18:05:32.863 に答える