我正在开发一个Android项目,只是为了让你知道我是一个全新的。我有一个有多个表的项目。列表活动在单击时会导致另一个列表活动。顶级活动的构造函数在创建行时将id设置为类。第二级活动的表和数据的一部分是对顶级活动的id的引用。当我创建第二级活动的对象时,我不确定如何添加id。也许查看我的代码会使问题更加清晰。
这是我的学期课程:
package com.mikero.termtracker;
public class Term {
private long id;
private String termsName;
private String termStartDate;
private String termEndDate;
//Constructor
Term(){
}
Term(String termsName, String termStartDate, String termEndDate){
this.termsName = termsName;
this.termStartDate = termStartDate;
this.termEndDate = termEndDate;
}
Term(int id, String termsName, String termStartDate, String termEndDate){
this.id = id;
this.termsName = termsName;
this.termStartDate = termStartDate;
this.termEndDate = termEndDate;
}
//G&S id
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
//G&S terms name
public String getTermsName() {
return termsName;
}
public void setTermsName(String termsName) {
this.termsName = termsName;
}
//G&S terms start date
public String getTermStartDate() {
return termStartDate;
}
public void setTermStartDate(String termStartDate) {
this.termStartDate = termStartDate;
}
//G&S terms end date
public String getTermEndDate() {
return termEndDate;
}
public void setTermEndDate(String termEndDate) {
this.termEndDate = termEndDate;
}
public String toString(){
return termsName;
}
}
这是我的课程课程:
package com.mikero.termtracker;
public class Course {
private long id;
private String courseName;
private String courseStart;
private String courseEnd;
private String courseStatus;
private String courseMentor;
private String termId;
Course(){
}
//需要这个构造函数的帮助
Course(String courseName, String courseStart, String courseEnd, String courseStatus,
String courseMentor){
this.courseName = courseName;
this.courseStart = courseStart;
this.courseEnd = courseEnd;
this.courseStatus = courseStatus;
this.courseMentor = courseMentor;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCourseStart() {
return courseStart;
}
public void setCourseStart(String courseStart) {
this.courseStart = courseStart;
}
public String getCourseEnd() {
return courseEnd;
}
public void setCourseEnd(String courseEnd) {
this.courseEnd = courseEnd;
}
public String getCourseStatus() {
return courseStatus;
}
public void setCourseStatus(String courseStatus) {
this.courseStatus = courseStatus;
}
public String getCourseMentor() {
return courseMentor;
}
public void setCourseMentor(String courseMentor) {
this.courseMentor = courseMentor;
}
public String getTermId() {
return termId;
}
public void setTermId(String termId) {
this.termId = termId;
}
public String toString() {
return courseName;
}
}
这是一个DataSource类,它根据从编辑文本框收集的数据创建行和类:
package com.mikero.termtracker;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import java.util.ArrayList;
import java.util.List;
public class DataSource {
//Fields
private SQLiteDatabase db;
private DBOpenHelper helper;
private String[] allTermColums = {DBOpenHelper.KEY_ID, DBOpenHelper.NAME_OF_TERM,
DBOpenHelper.TERM_START_DATE, DBOpenHelper.TERM_END_DATE};
private String[] allCourseColums = {DBOpenHelper.COURSE_ID, DBOpenHelper.COURSE_NAME,
DBOpenHelper.COURSE_START, DBOpenHelper.COURSE_END, DBOpenHelper.COURSE_STATUS,
DBOpenHelper.COURSE_MENTOR, DBOpenHelper.KEY_ID};
public DataSource(Context context){
helper = new DBOpenHelper(context);
}
public void open() throws SQLiteException{
db = helper.getWritableDatabase();
}
public void close(){
helper.close();
}
//Create Term
public Term createTerm(Term term){
ContentValues cv = new ContentValues();
cv.put(DBOpenHelper.NAME_OF_TERM, term.getTermsName());
cv.put(DBOpenHelper.TERM_START_DATE, term.getTermStartDate());
cv.put(DBOpenHelper.TERM_END_DATE, term.getTermEndDate());
long insertId = db.insert(DBOpenHelper.TERMS_TABLE, null, cv);
term.setId(insertId);
return term;
}
//Create Course
public Course createCourse(Course course){
ContentValues cv = new ContentValues();
cv.put(DBOpenHelper.COURSE_NAME, course.getCourseName());
cv.put(DBOpenHelper.COURSE_START, course.getCourseStart());
cv.put(DBOpenHelper.COURSE_END, course.getCourseEnd());
cv.put(DBOpenHelper.COURSE_STATUS, course.getCourseStatus());
cv.put(DBOpenHelper.COURSE_MENTOR, course.getCourseMentor());
cv.put(DBOpenHelper.KEY_ID, course.getTermId());
long insertId = db.insert(DBOpenHelper.COURSE_TABLE, null, cv);
course.setId(insertId);
return course;
}
//Update term
public void updateTerm(Term term){
long id = term.getId();
ContentValues cv = new ContentValues();
cv.put(DBOpenHelper.NAME_OF_TERM, term.getTermsName());
cv.put(DBOpenHelper.TERM_START_DATE, term.getTermStartDate());
cv.put(DBOpenHelper.TERM_END_DATE, term.getTermEndDate());
db.update(DBOpenHelper.TERMS_TABLE, cv, DBOpenHelper.KEY_ID + " = " + id, null);
}
//Update Course
public void updateCourse(Course course){
long id = course.getId();
ContentValues cv = new ContentValues();
cv.put(DBOpenHelper.COURSE_NAME, course.getCourseName());
cv.put(DBOpenHelper.COURSE_START, course.getCourseStart());
cv.put(DBOpenHelper.COURSE_END, course.getCourseEnd());
cv.put(DBOpenHelper.COURSE_STATUS, course.getCourseStatus());
cv.put(DBOpenHelper.COURSE_MENTOR, course.getCourseMentor());
cv.put(DBOpenHelper.KEY_ID, course.getTermId());
db.update(DBOpenHelper.COURSE_TABLE, cv, DBOpenHelper.COURSE_ID + " = " + id, null);
}
//CursorToTerm method
private Term cursorToTerm(Cursor cursor){
Term term = new Term();
term.setId(cursor.getLong(0));
term.setTermsName(cursor.getString(1));
term.setTermStartDate(cursor.getString(2));
term.setTermEndDate(cursor.getString(3));
return term;
}
//CursonToCourse
private Course cursorToCourse(Cursor cursor){
Course course = new Course();
course.setId(cursor.getLong(0));
course.setCourseName(cursor.getString(1));
course.setCourseStart(cursor.getString(2));
course.setCourseEnd(cursor.getString(3));
course.setCourseStatus(cursor.getString(4));
course.setCourseMentor(cursor.getString(5));
return course;
}
//Getting all terms
public List<Term> getAllTerms(){
List<Term> termList = new ArrayList<>();
Cursor cursor = db.query(DBOpenHelper.TERMS_TABLE, allTermColums,
null, null, null, null, null);
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
Term term = cursorToTerm(cursor);
termList.add(term);
cursor.moveToNext();
}
cursor.close();
return termList;
}
//Getting all courses
public List<Course> getAllCourses(){
List<Course> courseList = new ArrayList<>();
Cursor cursor = db.query(DBOpenHelper.COURSE_TABLE, allCourseColums,
null, null, null, null, null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
Course course = cursorToCourse(cursor);
courseList.add(course);
cursor.moveToNext();
}
cursor.close();
return courseList;
}
//Getting and creating a single term
public Term getSingleTermById(long id){
Cursor cursor = db.query(DBOpenHelper.TERMS_TABLE, allTermColums,
DBOpenHelper.KEY_ID + " = ?",
new String[] {String.valueOf(id)}, null, null, null);
if (cursor != null){
cursor.moveToFirst();
}
Term term = cursorToTerm(cursor);
return term;
}
//Getting and creating a single course
public Course getSingleCourseById(long id){
Cursor cursor = db.query(DBOpenHelper.COURSE_TABLE, allCourseColums,
DBOpenHelper.COURSE_ID + " = ?",
new String[] {String.valueOf(id)}, null, null, null);
if (cursor != null){
cursor.moveToFirst();
}
Course course = cursorToCourse(cursor);
return course;
}
//Delete single term
public void deleteTerm(Term term){
long id = term.getId();
db.delete(DBOpenHelper.TERMS_TABLE, DBOpenHelper.KEY_ID + " = " + id, null);
}
//Delete single course
public void deleteCourse(Course course){
long id = course.getId();
db.delete(DBOpenHelper.COURSE_TABLE, DBOpenHelper.COURSE_ID + " = " + id, null);
}
//Delete single term by id
public void deleteTermById(long id){
db.delete(DBOpenHelper.TERMS_TABLE, DBOpenHelper.KEY_ID + " = " + id, null);
}
//Delete single course by id
public void deleteCourseById(long id){
db.delete(DBOpenHelper.COURSE_TABLE, DBOpenHelper.COURSE_ID + " = " + id, null);
}
}
这是从编辑文本框创建新课程的活动。每个课程都与一个术语相关联,因此首先在应用程序中创建术语,然后单击该术语并创建与术语相关的课程。它将我正在努力的两个联系起来。
package com.mikero.termtracker;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class CourseEditActivity extends AppCompatActivity {
private Button courseAddButton;
private EditText courseNameEditText;
private EditText courseStartEditText;
private EditText courseEndEditText;
private EditText courseStatusEditText;
private EditText courseMentorEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_term_edit);
courseAddButton = (Button) findViewById(R.id.add_course_button);
courseNameEditText = (EditText) findViewById(R.id.course_name_edittext);
courseStartEditText = (EditText) findViewById(R.id.course_start_edittext);
courseEndEditText= (EditText) findViewById(R.id.course_end_editext);
courseStatusEditText = (EditText) findViewById(R.id.course_status_editext);
courseMentorEditText = (EditText) findViewById(R.id.course_mentor_editext);
courseAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Code to test that edit boxes are filled
if(courseNameEditText.getText().toString().trim().length() > 0
&& courseStartEditText.getText().toString().trim().length() > 0
&& courseEndEditText.getText().toString().trim().length() > 0)
&& courseStatusEditText.getText().toString().trim().length() > 0
&& courseMentorEditText.getText().toString().trim().length() > 0 {
Course course = new Course(courseNameEditText.getText().toString(),
courseStartEditText.getText().toString(),
courseEndEditText.getText().toString()),
courseStatusEditText.getText().toString()),
courseMentorEditText.getText().toString());
DataSource ds = new DataSource(getApplicationContext());
ds.open();
ds.createCourse(course);
ds.close();
}
}
});
}
}
正如您在调用createterm()方法时从数据源中看到的那样,它会将所有相应的列添加到数据库中,然后更新id,然后返回该术语。当我尝试运行createcourse()方法时,我不确定如何创建一个能够从关联术语中获取正确id的课程对象。