2016-11-25 56 views
-2

我是android新手。我創建了一個日期選擇器。但我不能在數據庫中插入日期。 我試過:如何在android中使用datepicker在SqLite數據庫中插入日期

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
String formattedDate = formatter.format(provider.getDate()); 
values.put(DATE, formattedDate); 

android不支持DATE數據類型。所以我宣佈爲字符串。 但問題沒有解決。 這裏是我的代碼:

數據庫處理器

public class DatabaseHandler extends SQLiteOpenHelper { 
public static final String DATABASE_NAME = "income.db"; 
public static final String TABLE_NAME = "income_table"; 
public static final String ID="id"; 
public static final String AMOUNT = "amount"; 
public static final String PAYER_NAME = "payer"; 
public static final String NOTE = "note"; 

public static final String DATE= "date"; 


String query = "CREATE TABLE " + TABLE_NAME + 
     "(" +ID+ " integer primary key autoincrement, " + AMOUNT + " real, " 
     + PAYER_NAME + " text, " + NOTE + " text, " + DATE + " text " + ")"; 




public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    sqLiteDatabase.execSQL(query); 

} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(sqLiteDatabase); 

} 

public void addInformation(DataProvider provider){ 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    String formattedDate = formatter.format(provider.getDate()); 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values=new ContentValues(); 
    values.put(AMOUNT,provider.getMoney()); 
    values.put(PAYER_NAME,provider.getName()); 
    values.put(NOTE,provider.getDesc()); 
    values.put(DATE, formattedDate); 
    db.insert(TABLE_NAME, null, values); 
    db.close(); 

} 

DataProvider類:

public class DataProvider { 
private double money; 
private String name; 
private String desc; 
private String date; 

public String getDate() { 
    return date; 
} 

public void setDate(String date) { 
    this.date = date; 
} 

public DataProvider(double money, String name, String desc, String date) { 
    this.money = money; 
    this.name = name; 
    this.desc = desc; 
    this.date=date; 


} 



public double getMoney() { 
    return money; 
} 

public void setMoney(double money) { 
    this.money = money; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getDesc() { 
    return desc; 
} 

public void setDesc(String desc) { 
    this.desc = desc; 
} 

} 

日期選擇器類:

public class Income extends AppCompatActivity implements View.OnClickListener { 

TextView amount, payer, note, show,showDate; 
EditText edit_amount, payer_name, edit_note; 
Button save, cancel; 
DatabaseHandler db; 
ImageButton date; 
int year,month,day; 

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

    save = (Button) findViewById(R.id.save); 
    cancel = (Button) findViewById(R.id.cancel); 

    amount = (TextView) findViewById(R.id.amount); 
    payer = (TextView) findViewById(R.id.payer); 
    note = (TextView) findViewById(R.id.note); 
    show = (TextView) findViewById(R.id.show); 
    showDate = (TextView) findViewById(R.id.showDate); 

    edit_amount = (EditText) findViewById(R.id.edit_amount); 
    payer_name = (EditText) findViewById(R.id.edit_payer); 
    edit_note = (EditText) findViewById(R.id.edit_note); 
    //date= (ImageButton) findViewById(R.id.datePicker); 

    db = new DatabaseHandler(this); 

    save.setOnClickListener(this); 
    cancel.setOnClickListener(this); 
    showDate.setOnClickListener(this); 
} 

@RequiresApi(api = Build.VERSION_CODES.N) 
@Override 
public void onClick(View view) { 
    if (view.getId() == R.id.save) { 
     String amounts,payers,notes,date; 
     amounts=edit_amount.getText().toString(); 
     payers= payer_name.getText().toString(); 
     notes= edit_note.getText().toString(); 
     date=showDate.getText().toString(); 
     if(amounts.isEmpty()) 
     { 
      edit_amount.setError("Amounts should not be blank"); 
     } 
     else { 
      Double a =new Double(amounts.toString()); 
      DataProvider provider = new DataProvider(a, payers, notes,date); 
      db.addInformation(provider); 
      Intent i = new Intent(this, MainActivity.class); 
      startActivity(i); 
     } 
    } 

    if (view.getId() == R.id.cancel) { 
     Intent i =new Intent(this,MainActivity.class); 
     startActivity(i); 
    } 

    if (view.getId()==R.id.showDate){ 

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

      DatePickerDialog dpd = new DatePickerDialog(this, 
        new DatePickerDialog.OnDateSetListener() { 
         @Override 
         public void onDateSet(DatePicker datePicker, int i, int i1, int i2) { 
         showDate.setText(i+"/"+(i1+1)+"/"+i2); 
         } 
        },year,month,day); 
      dpd.show(); 


    } 

    } 
} 

回答

0

同時插入到數據庫中你是不是保存日期由日期選取器提取,嘗試替換下面的代碼

values.put(DATE, formattedDate);

與代碼

values.put(DATE, showDate.getText().toString());

請確保點擊保存按鈕之前,你拿起日期及其showText文本框中出現。

+0

我試過了,但它不起作用 – Fatema

+0

您是否收到任何錯誤消息? – Girish

+0

,你能看到showText中的文字?在保存之前... – Girish

0

當使用日期選取器,我們的格式選擇爲8個字符,那麼所有日期查看日期的子程序格式字符串看起來像這樣 2017年1月2日,但這種格式的瀏覽,只有當串發送到DB其轉換回低於這個01022017是我們的日期選擇器代碼和子例程格式的視圖也包括被刪除的dashs代碼「 - 」

日期選擇器代碼

public void findByDate(){ 

    final Dialog dialog = new Dialog(DetailsActivity.this,R.style.DatePickerTheme); 
    dialog.setContentView(R.layout.datepickerview); 
    dialog.setTitle(""); 
    DatePicker picker = dialog.findViewById(R.id.datePicker); 
    final Calendar c = Calendar.getInstance(); 
    mYear = c.get(Calendar.YEAR); 
    mMonth = c.get(Calendar.MONTH); 
    mDay = c.get(Calendar.DAY_OF_MONTH); 
    picker.updateDate(mYear, mMonth, mDay);// Keeps Calendar initial view what ever today is! 

    picker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() { 

     @Override 
     public void onDateChanged(DatePicker picker, int year, int monthOfYear, int dayOfMonth) { 

       String searchFrom = (String.valueOf(monthOfYear + 1)) + (String.valueOf(dayOfMonth)) + String.valueOf(year); 
       if (searchFrom.length() == 7) { 
        StringBuilder str = new StringBuilder(searchFrom); 
        str.insert(2, '0'); 
        etPurchaseDate.setText(str); 
       } else if (searchFrom.length() == 6) { 
        StringBuilder str = new StringBuilder(searchFrom); 
        str.insert(0, '0'); 
        str.insert(2, '0'); 
        System.out.println("===========================str "+str); 
        etPurchaseDate.setText(str); 
       } else { 

        etPurchaseDate.setText(searchFrom); 
       } 
       Toast.makeText(DetailsActivity.this, "Date Formatted for Storage", Toast.LENGTH_LONG).show(); 
       etCost.requestFocus(); 
       dialog.dismiss(); 

     } 
}); 

    dialog.show(); 
} 

格式化日期字符串的子例程

public String DATE_TO_FORMAT(String formatDATE){ 
    /* THIS METHOD KEEP THE DATE FORMATTED FOR DISPLAY */ 
    /* ONLY CALLED FROM ERROR TRAPPING */ 
    String s = etPurchaseDate.getText().toString(); 
    String RDmonth = s.substring(0, 2); 
    String RDday = s.substring(2, 4); 
    String RDyear = s.substring(4, 8); 
    formatDATE = RDmonth + "-" + RDday + "-" + RDyear; 
    return formatDATE; 
} 

節省例如日期進入像以前那樣採用這種設計與最終用戶打交道不使用日期選取器,這需要在你的錯誤捕獲要處理刪除Dash的

   if(etPurchaseDate.length()==10){// 
       /* Routine puts DATE back in DB as 8 Character String REMOVES dashes "-" */ 
       StringBuilder removeTHIS = new StringBuilder(etPurchaseDate.getText().toString()); 
       String value = removeTHIS.toString().replace("-", ""); 
       etPurchaseDate.setText(value); 
       etCost.requestFocus(); 
       purchase_date = value; 
      //}else{ 
       //etPurchaseDate.setText(etPurchaseDate.getText().toString()); 
       etCost.requestFocus(); 
      } 

一大問題00-33-0217這可能是最好的強制所有日期與日期選擇器進入並設置禁用字段但設計有其他問題

相關問題