Я студент, работающий над моим первым Android студийным проектом. Мои попытки поиска этой проблемы привели к большому количеству результатов форматирования даты, которые, я уверен, не проблема.
Я создаю объект с параметрами int и тремя String
. Две строки преобразуются из объекта Date
. Кажется, все идет хорошо, пока я не позвоню в DAO, чтобы вставить его в базу данных. Он вставляет, но две строки преобразованных дат больше не являются строками. Может кто-нибудь сказать мне, почему это происходит и как я могу остановить это? Мои лучшие догадки по необходимому коду ниже:
@Override
protected Void doInBackground(final Void... params) {
mTermDao.deleteAllTerms();
Calendar calobj = Calendar.getInstance();
calobj.add(Calendar.MONTH, -3);
calobj.add(Calendar.DATE, -3);
Date notToday = calobj.getTime();
calobj.add(Calendar.MONTH, 6);
Date next = calobj.getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String strDateOne = dateFormat.format(notToday);
String strDateTwo = dateFormat.format(next);
String termTitle = "Term 1";
TermEntity termEntity= new TermEntity(1,termTitle, strDateOne, strDateTwo);
mTermDao.insert(termEntity);
return null;
}
И Dao
@Dao
public interface TermDAO {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(TermEntity termEntity);
}
ViewModel
public class TermViewModel extends AndroidViewModel {
private ScheduleRepository mRepository;
private LiveData<List<TermEntity>> mAllTerms;
public TermViewModel(Application application){
super(application);
mRepository=new ScheduleRepository(application);
mAllTerms =mRepository.getAllTerms();
}
public LiveData<List<TermEntity>> getAllTerms(){
return mAllTerms;
}
public void insert(TermEntity termEntity){
mRepository.insert(termEntity);
}
public void delete(TermEntity termEntity){
mRepository.delete(termEntity);
}
public int lastID(){
return mAllTerms.getValue().size();
}
}
TermEntity
@Entity(tableName="term_table")
public class TermEntity {
@PrimaryKey
private int termId;
private String termTitle;
private String termStart;
private String termEnd;
public TermEntity(int termId, String termTitle, String termStart, String termEnd) {
this.termId = termId;
this.termTitle = termTitle;
this.termStart = termStart;
this.termEnd = termEnd;
}
@Override
public String toString() {
return "TermEntity{" +
"termId=" + termId +
", termTitle='" + termTitle + '\'' +
", termStart=" + termStart +
", termEnd=" + termEnd +
'}';
}
public int getTermId() {
return termId;
}
public void setTermId(int termId) {
this.termId = termId;
}
public String getTermTitle() {
return termTitle;
}
public void setTermTitle(String termTitle) {
this.termTitle = termTitle;
}
public String getTermStart() {
return termStart;
}
public void setTermStart(String termStart) {
this.termStart = termStart;
}
public String getTermEnd() {
return termEnd;
}
public void setTermEnd(String termEnd) {
this.termEnd = termEnd;
}
}
TermAdapter, к которому осуществляется доступ к объекту.
public class TermAdapter extends RecyclerView.Adapter<TermAdapter.TermViewHolder> {
class TermViewHolder extends RecyclerView.ViewHolder {
private final TextView termItemView;
private TermViewHolder(View itemView) {
super(itemView);
termItemView = itemView.findViewById(R.id.termTextView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
final TermEntity current = mTerms.get(position);
Intent intent = new Intent(context, TermDetailsActivity.class);
intent.putExtra("termTitle", current.getTermTitle());
intent.putExtra("startTerm", current.getTermStart());
intent.putExtra("endTerm", current.getTermEnd());
intent.putExtra("termId", current.getTermId());
intent.putExtra("position",position);
context.startActivity(intent);
}
});
}
}
Из действия, где получено намерение
if(getIntent().getStringExtra("termTitle")!=null) {
String start = getIntent().getStringExtra("termStart");
nameView.setText(getIntent().getStringExtra("termTitle"));
startView.setText(start);
endView.setText(getIntent().getStringExtra("termEnd"));
}
Он создает объект и вставляет в базу данных, но позже, когда я используйте функцию get для начальной и конечной строк для заполнения textView, они отображаются как нулевые. В программе нет ошибок, поля просто выглядят пустыми.
Я должен добавить, что моя теория основана на запуске отладки с контрольными точками в последних двух строках первого блока кода. В этой строке: TermEntity termEntity = new TermEntity (1, termTitle, strDateOne, strDateTwo); моя IDE показала значения для strDateOne и strDateTwo в виде строк. Однако, когда он запустил следующую строку, вместо того, чтобы заключаться в одинарные кавычки, такие как «Термин 1», у них не было кавычек.