2016-11-25 2 views
-2

Я новичок в android. Я создал сборщик дат. Но я не мог вставить дату в базу данных. Я попытался как:Как вставить дату в базу данных SqLite в android с datepicker

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

типа DATE данных не поддерживается Android. Поэтому я объявлен как String. Но проблема не решена. Вот мой код:

Handler Database

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; 
} 

} 

Datepicker класс:

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 символов, а затем для просмотра даты подпрограммных форматов, которые будут выглядеть так: 01-02-2017, но этот формат предназначен для просмотра только в том случае, если строка отправляется в БД он преобразуется обратно в этот 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; 
} 

Удалить

   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(); 
      } 

один большой вопрос тира с этим дизайном имеет дело с конечным пользователем не с помощью Date Picker это необходимо, чтобы иметь дело с вашей ошибкой отлова перед сохранением, например, дата введенной как это 00-33-0217. Лучше всего заставить все даты вводить с помощью Датчика даты и установить поле отключено. НО этот проект имеет другие проблемы.

Смежные вопросы