2016-03-06 98 views
0

寻找解决方案3天后我希望有人可以帮助我在这里,我是一个新的android开发,我试图保存datepicker对话框或我的datepicker部件的日期为我的SQLite数据库,我没有得到任何错误,但它救了我的日期,1969年12月31日,无论我做什么,这是我的DatePickerFragment类保存约会日期到数据库

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    private Calendar dateTime = Calendar.getInstance(); 


    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Using current date as start Date 
     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); 

     // Get DatePicker Dialog 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 


    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

     TextView chooseDateLabel = (TextView)getActivity().findViewById(R.id.chooseDateLabel); 

     dateTime.set(year, monthOfYear, dayOfMonth); 

     final int myYear = year; 
     final int myMonth = monthOfYear; 
     final int myDay = dayOfMonth; 

     chooseDateLabel.setText(new StringBuilder().append(myMonth + 1).append("/").append(myDay) 
       .append("/").append(myYear).append(" ")); 
     DatePicker datePicker = (DatePicker)getActivity().findViewById(R.id.saveJobDatePicker); 

     datePicker.init(myYear, myMonth, myDay, new DatePicker.OnDateChangedListener() { 
      @Override 
      public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       year = myYear; 
       monthOfYear = myMonth; 
       dayOfMonth = myDay; 

       ContentValues values = new ContentValues(); 
       values.put("productDate", year + monthOfYear + dayOfMonth); 


      } 
     }); 


     ContentValues values = new ContentValues(); 
     values.put("date", myDay + myMonth + myYear); 

    } 
} 

,你可以看到我有没有显示已选定的日期一个TextView问题。 这是我添加到表的DataBaseHelper代码。

 //add content to table 
    public void addProduct(MyProduct product){ 

    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(PRODUCT_NAME, product.getproductName()); 
    values.put(PRODUCT_NUMBER, product.getproductNumber()); 
    values.put(PRODUCT_WEIGHT, product.getproductWeight()); 
    values.put(PRODUCT_QTY, product.getproductQTY()); 
    values.put(DATE_NAME, product.getproductDate()); 

    db.insert(TABLE_NAME, null, values); 


    Log.v("Wish successfully!", "yeah!!"); 

    db.close(); 
} 

这就是我试图保存日期的方法。是这样

@Override 
public void onCreate(SQLiteDatabase db) { 
    //create our table 

    db.execSQL("CREATE TABLE " + TABLE_NAME+ "(ID INTEGER PRIMARY KEY AUTOINCREMENT, PRODUCTNAME TEXT, PRODUCTNUMBER INTEGER, PRODUCTQTY REAL, PRODUCTWEIGHT REAL, PRODUCTDATE LONG, PRODUCTCOMPLETED INTEGER)"); 

} 

我getView方法中我'尝试我的长格式化字符串等产生

private void saveProductDB() { 


    Intent intent = getIntent(); 
    final Double myLabelResults = intent.getDoubleExtra("totalQTY", 0.0); 

    final MyProduct product = new MyProduct(); 
    product.setproductName(saveproductNameText.getText().toString().trim()); 
    product.setproductNumber(Integer.valueOf(saveproductNumberText.getText().toString().trim())); 
    product.setproductWeight(myLabelResults); 
    product.setproductQTY(myLabelResults/14); 
    product.getproductPavingOnLabel(); 

    saveProductDate = (DatePicker)findViewById(R.id.saveProductDatePicker); 

    Calendar calendar = Calendar.getInstance(); 

    int day = saveProductDate.getDayOfMonth(); 
    int month = saveProductDate.getMonth(); 
    int year = saveProductDate.getYear(); 

    calendar.set(day, month, year); 
    long myLongDate = calendar.getTimeInMillis(); 


    product.setProductDate(myLongDate); 

    dba.Product(product); 
    dba.close(); 

    saveproductNameText.setText(""); 
    saveproductNumberText.setText(""); 

    Intent i = new Intent(SaveProduct.this, MyProductActivity.class); 
    startActivity(i); 
    //Toast.makeText(getApplicationContext(),"Product Saved",  Toast.LENGTH_LONG).show(); 

} 

我的数据库表这个

long dateFromProductDate = holder.myProduct.getProductDate(); 
String dateString = new SimpleDateFormat("MM/dd/yyyy").format(new Date(dateFromProductDate)); 
holder.mJobsDate.setText(dateString); 

有人可以帮我找出我在哪里犯错,谢谢。

+0

“无论我做什么,它都将我的日期保存为12/31/1969” - 您想如何保存日期? – Inducesmile

+0

对不起,我的意思是,这是不是从datepicker保存日期和其默认为12/31/1969,并忽略日期选择器上的选定日期 – Vacano

回答

1

发现问题,感谢getView代码很多@Nolly j表示的帮助下,我的产品活动中我有一个refreshData方法有日期为测试目的而设置为字符串,并忘记将其更改为长,在这里。

private void refreshData() { 
    dbProducts.clear(); 
    dba = new DatabaseHandler(getApplicationContext()); 

    ArrayList<MyProduct> productsFromDB = dba.getProducts(); 

    for (int i = 0; i < productsFromDB.size(); i++){ 

     String productName = productsFromDB.get(i).getProductName(); 
     int productNumber = productsFromDB.get(i).getProductNumber(); 
     Double productTons = productsFromDB.get(i).getProductWeight(); 
     Double productTrucks = productsFromDB.get(i).getProductQTY(); 
     //String productDate = productsFromDB.get(i).getProductBirthDate(); 
     long productDate = productsFromDB.get(i).getProductDate(); 

     MyProduct myProduct = new MyProduct(); 
     myProduct.setProductName(productName); 
     myProduct.setProductNumber(productNumber); 
     myProduct.setProductTons(productWeight); 
     myProduct.setProductTrucks(productQTY); 
     myProduct.setProductDate(productDate); 
     //myJob.setProductDate(ProductDate); 

     dbProducts.add(myProduct); 
    } 

注释掉的语句是问题。

0

我写了一个简单的代码,可以让你朝正确的方向发展。选定的日期时间是全球性的,并且可以访问。

import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.DatePicker; 
import android.widget.TextView; 

import java.util.Calendar; 

public class MainActivity extends AppCompatActivity { 

private static TextView chooseDateLabel; 

private DatePickerFragment datePickerFragment; 
private static Calendar dateTime = Calendar.getInstance(); 

protected static int mYear; 
protected static int mMonth; 
protected static int mDay; 

private static long dateInMilliSeconds; 

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

    chooseDateLabel = (TextView)findViewById(R.id.chooseDateLabel); 

    datePickerFragment = new DatePickerFragment(); 
    datePickerFragment.show(getSupportFragmentManager(), "My Date Picker"); 

} 

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Using current date as start Date 
     final Calendar c = Calendar.getInstance(); 
     mYear = c.get(Calendar.YEAR); 
     mMonth = c.get(Calendar.MONTH); 
     mDay = c.get(Calendar.DAY_OF_MONTH); 

     // Get DatePicker Dialog 
     return new DatePickerDialog(getActivity(), this, mYear, mMonth, mDay); 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

     mYear = year; 
     mMonth = monthOfYear; 
     mDay = dayOfMonth; 

     chooseDateLabel.setText(String.valueOf(mDay) + "/" + String.valueOf(mMonth) + "/" + String.valueOf(mYear)); 

     dateTime.set(mYear, monthOfYear, dayOfMonth); 
     dateInMilliSeconds = dateTime.getTimeInMillis(); 
    } 
} 

private void saveProductDB(){ 

    Intent intent = getIntent(); 
    final Double myLabelResults = intent.getDoubleExtra("totalQTY", 0.0); 

    final MyProduct product = new MyProduct(); 
    product.setproductName(saveproductNameText.getText().toString().trim()); 
    product.setproductNumber(Integer.valueOf(saveproductNumberText.getText().toString().trim())); 
    product.setproductWeight(myLabelResults); 
    product.setproductQTY(myLabelResults/14); 
    product.setProductDate(dateInMilliSeconds); 
    product.getproductPavingOnLabel(); 

    dba.Product(product); 
    dba.close(); 

    saveproductNameText.setText(""); 
    saveproductNumberText.setText(""); 

    Intent i = new Intent(SaveProduct.this, MyProductActivity.class); 
    startActivity(i); 
} 
} 

这是我的列表视图

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row = convertView; 
     //ViewHolder holder = null; 

     if(row == null || (row.getTag()) == null){ 

      LayoutInflater inflater = LayoutInflater.from(activity); 
      row = inflater.inflate(layoutResorce, null); 
      holder = new ViewHolder(); 

      holder.mProductName = (TextView) row.findViewById(R.id.ProductNameLabel); 
      holder.mProductNumber = (TextView) row.findViewById(R.id.ProductNumberLabel); 
      holder.mProductWeight = (TextView) row.findViewById(R.id.WeightLabel); 
      holder.mProductQTY = (TextView) row.findViewById(R.id.QTYLable); 
      holder.mProductDate = (TextView) row.findViewById(R.id.dateLabel);     

      row.setTag(holder); 
     }else{ 

      holder = (ViewHolder) row.getTag(); 
     } 

     holder.myProduct = getItem(position); 

     holder.mProductName.setText(holder.myProduct.getProductName()); 
     holder.mProductNumber.setText(String.valueOf(holder.myProduct.getProductNumber())); 
     holder.mProductWeight.setText(String.format("%.1f", holder.myProduct.getProductWeight()) + " Weight"); 
     holder.mProductQTY.setText(String.format("%.1f", holder.myProduct.getProductQTY()) + " QTY"); 

     long dateFromProductDate = holder.myProduct.getProductDate(); 
     String dateString = new SimpleDateFormat("MM/dd/yyyy").format(new Date(dateFromProductDate)); 
     holder.mProductDate.setText(dateString); 

     return row; 
    } 

    //get all products 
public ArrayList<MyProduct> getProducts(){ 

    //String selectQuery = "SELECT * FROM " + TABLE_NAME; 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_NAME, new String[]{ PRODUCT_NAME, PRODUCT_NUMBER, PRODUCT_QTY, 
      PRODUCT_WEIGHT, DATE_NAME}, null, null, null, null, "PRODUCTDATE DESC"); 

    //loop through cursor 
    if(cursor.moveToFirst()){ 
     do{ 

      MyProduct job = new MyProduct(); 
      product.setProductName(cursor.getString(cursor.getColumnIndex(PRODUCT_NAME))); 
      product.setProductNumber(cursor.getInt(cursor.getColumnIndex(PRODUCT_NUMBER))); 
      product.setProductWeight(cursor.getDouble(cursor.getColumnIndex(PRODUCT_WEIGHT))); 
      product.setProductQTY(cursor.getDouble(cursor.getColumnIndex(PRODUCT_QTY))); 
      //product.setProductDate(cursor.getLong(cursor.getColumnIndex(DATE_NAME))); 

      long milliSeconds = product.setProductDate(cursor.getLong(product.getProductDate())); 
      DateFormat df = new SimpleFormat("MM/dd/yyyy"); 
      String dateString = df.format(new Date(milliSeconds)).toString(); 

      //java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(); 
      //String dateData = dateFormat.format(new Date(cursor.getLong(cursor.getColumnIndex(DATE_NAME))).getTime()); 
      product.setProductDate(dateString); 

      productList.add(product); 

     }while(cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 

    return productList; 
} 
+0

以及它似乎我得到一个值,dateInMilliSeconds现在= 1473136589551谢谢,但仍然是我的listview显示12/31/1969,我会发布我的getView代码。 – Vacano

+0

您需要将此值插入到数据库中,当您从数据库检索数据时,您将其格式化为所需的日期格式。 – Inducesmile

+0

这些值在数据库中,以确保我导出数据库,并发现所有的日期只是无法弄清楚如何格式化和显示在我的列表视图我试过DateFormat,但我仍然不能。 – Vacano

相关问题