数据库中的日期存储为字符串,如何检索它?

时间:2014-01-28 10:35:27

标签: android date datepicker

我正在使用日期选择器来选择我的日期,之后,它将以String的形式存储到我的数据库中。

我是否可以知道如何将数据库中的日期作为字符串取出?

这是因为, 我需要做一个摘要页面,将所有数据传递给下一个意图。 意思是,我需要将我的视图中的数据全部传递到我的摘要页面,以便将所有数据都包含在摘要页面中。 这是为了让我能够轻松过滤我们的日期。

例如, 如果日期 - 2014年12月27日,它将显示结果列表。

我快速检查了我的数据,看看能否查看结果。 我在我的summary.java中放了一个datepicker,它位于editText(monthDate)中, 所以如果monthDate = bundleDate(这是我从view all传递的所有数据结果), 它会开始一个新的意图。 否则,它将转到关于页面。

然而,我的代码跳过IF部分, 即使我选择了正确的日期,如果代码而不是else代码,它将通过else。

public class summary extends Activity {

    static EditText monthDate;
    TextView avgPrice;
    TextView exFuel;
    TextView avgFC;
    Button doneButton;
    Button exitButton;
       private String bundleID;
       private String bundleDate;
        private String bundlePrice;
        private String bundlePump;
        private String bundleCost;
        private String bundleOdometer;
        private String bundlePreOdometer;

        private String bundleFcon;
        static final int DATE_DIALOG_ID = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.summary);

        monthDate = (EditText)findViewById(R.id.month);
        avgPrice = (TextView)findViewById(R.id.showavfPriceTV);
        exFuel = (TextView)findViewById(R.id.showexFuelTV);
        avgFC = (TextView)findViewById(R.id.showavgFCTV);
        doneButton = (Button)findViewById(R.id.doneBTN);
        exitButton = (Button)findViewById(R.id.exitBTN);

        Bundle takeBundledData = getIntent().getExtras();  
        // First we need to get the bundle data that pass from the UndergraduateListActivity

        bundleID = takeBundledData.getString("clickedID");
        bundleDate = takeBundledData.getString("clickedDate");
        bundlePrice = takeBundledData.getString("clickedPrice");
        bundlePump = takeBundledData.getString("clickedPump");
        bundleCost = takeBundledData.getString("clickedCost");
        bundleOdometer = takeBundledData.getString("clickedOdometer");
        bundlePreOdometer = takeBundledData.getString("clickedpreOdometer");
        bundleFcon = takeBundledData.getString("clickedFCon");

        Log.d("SUMMARY","bundle : "+ takeBundledData);

        monthDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               // showDialog(DATE_DIALOG_ID);
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getFragmentManager(), "datePicker");
            }
        });
        doneButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (monthDate.equals(bundleDate))
                {
                    Log.d("TRYINGOUT","date : "+ bundleDate);
                     Intent intent=new Intent(getApplicationContext(),homeActivity.class);
                     startActivity(intent);
                }
                else 
                {
                     Intent intent=new Intent(getApplicationContext(),about.class);
                     startActivity(intent);
                }

            }
        });
}


    public static class DatePickerFragment extends DialogFragment
    implements DatePickerDialog.OnDateSetListener {

        public EditText editText;
        DatePicker dpResult;

    public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker

    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    //return new DatePickerDialog(getActivity(), (EditSessionActivity)getActivity(), year, month, day);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {

        monthDate.setText(String.valueOf(day) + "/"
                + String.valueOf(month + 1) + "/" + String.valueOf(year));
        // set selected date into datepicker also
}}}

1 个答案:

答案 0 :(得分:1)

它不起作用,因为您尝试将Objectstring进行比较。 .equals()不检查变量兼容性。您需要做的是从EditText获取文字并将其与bundleDate

进行比较

另请注意,EditText.getText()方法会返回Editable,因此您需要将其转换为字符串。

将您的情况更改为:

//if(monthDate.equals(bundleDate))
if (monthDate.getText().toString().equals(bundleDate))
 {
    Log.d("TRYINGOUT","date : "+ bundleDate);
    Intent intent=new Intent(getApplicationContext(),homeActivity.class);
    startActivity(intent);
}
//rest of your code

并确保您的日期存储在捆绑包中以及您在EditText中输入的日期具有相同的格式,即dd-MM-yyyy

<强> @EDIT 如果你只想比较几个月,并且你很确定存储在bundle中的日期总是具有相同的格式(你提到的dd/MM/yyyy),那么你可以从日期字符串中提取子字符串

1)通过使用subSequence(start,stop) - 这将返回从字符串的第3和第4位的字符创建的字符串

//if(monthDate.equals(bundleDate))
if (monthDate.getText().toString().equals(bundleDate.subSequence(3,5).toString()))
 {
    //your code
}
//rest of your code

2)使用String.split()

准备数组以保持拆分结果String[] dateParts = bundleDate.split("/"); - 这将返回3个字符串到您的阵列,第一个将保留一天,第二个将保持一个月,第三个将保持一年

所以在代码中使用第二个(索引从零开始)

String[] dateParts = bundleDate.split("/");
//if(monthDate.equals(bundleDate))
if (monthDate.getText().toString().equals(dateParts[1]))
 {
    //your code
}
//rest of your code

这应该有效