Android与spinner的一对多关系

Android与spinner的一对多关系,android,sql,foreign-keys,android-spinner,android-room,Android,Sql,Foreign Keys,Android Spinner,Android Room,我有一个Android项目和room数据库,我正在尝试使用ids建立一对多关系。因此,在我的实体中,我添加了以下内容: package com.app.entity.author; import androidx.room.Entity; import androidx.room.ForeignKey; import androidx.room.PrimaryKey; import androidx.annotation.NonNull; import com.app.entity.depa

我有一个Android项目和room数据库,我正在尝试使用ids建立一对多关系。因此,在我的实体中,我添加了以下内容:

package com.app.entity.author;

import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import androidx.annotation.NonNull;

import com.app.entity.department.Department;
import com.app.entity.university.University;

@Entity(tableName = "author", foreignKeys = {
        @ForeignKey(
                entity = University.class,
                parentColumns = "id",
                childColumns = "university"
        ),
        @ForeignKey(
                entity = Department.class,
                parentColumns = "id",
                childColumns = "department"
        )
})
public class Author {

    @PrimaryKey(autoGenerate = true)
    private Integer id;
    @NonNull
    private String firstName;
    @NonNull
    private String lastName;
    @NonNull
    private String email;
    @NonNull
    private Integer university;
    @NonNull
    private Integer department;
    private String phone;
    private String mobile;
    private String profile;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setUniversity(Integer university) {
        this.university = university;
    }

    public Integer getUniversity() {
        return university;
    }

    public void setDepartment(Integer department) {
        this.department = department;
    }

    public Integer getDepartment() {
        return department;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPhone() {
        return phone;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getMobile() {
        return mobile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getProfile() {
        return profile;
    }


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        return this.getId() == ((Author) obj).getId();
    }

    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append(this.firstName).append(" ");
        buf.append(this.lastName).append(" ");
        buf.append(this.email).append(" ");
        buf.append(this.university).append(" ");
        buf.append(this.department).append(" ");
        buf.append(this.phone).append(" ");
        buf.append(this.mobile).append(" ");
        buf.append(this.profile).append(" ");
        return buf.toString();
    }

}
universityRepository = new UniversityRepository(this);
universityRepository.getAllUniversitys().observe(this, new Observer<List<University>>() {
    @Override
    public void onChanged(List<University> university) {
        ArrayAdapter<University> universityAdapter = new ArrayAdapter<>(AddNewAuthorActivity.this,
        android.R.layout.simple_list_item_1, university);
        universityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        universityEditText.setAdapter(universityAdapter); 
    }
});

saveButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Author author = new Author();
        author.setFirstName(firstNameEditText.getText().toString());
        author.setLastName(lastNameEditText.getText().toString());
        author.setEmail(emailEditText.getText().toString());
        University university = (University) universityEditText.getSelectedItem();
        author.setUniversity(university.getId()) ;
        Department department = (Department) departmentEditText.getSelectedItem();
        author.setDepartment(department.getId());
        author.setPhone(phoneEditText.getText().toString());
        author.setMobile(mobileEditText.getText().toString());
        author.setProfile(profileEditText.getText().toString());
        authorRepository.insert(author);
        finish();
    }
});
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Author author = authors.get(position);
    holder.idTextView.setText(String.valueOf(author.getId()));
    holder.firstNameTextView.setText(String.valueOf(author.getFirstName()));
    holder.lastNameTextView.setText(String.valueOf(author.getLastName()));
    holder.emailTextView.setText(String.valueOf(author.getEmail()));
    holder.universityTextView.setText(String.valueOf(author.getUniversity()));
    holder.departmentTextView.setText(String.valueOf(author.getDepartment()));
    holder.phoneTextView.setText(String.valueOf(author.getPhone()));
    holder.mobileTextView.setText(String.valueOf(author.getMobile()));
    holder.profileTextView.setText(String.valueOf(author.getProfile()));
}
在我的AddActivity中,我有以下内容:

package com.app.entity.author;

import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import androidx.annotation.NonNull;

import com.app.entity.department.Department;
import com.app.entity.university.University;

@Entity(tableName = "author", foreignKeys = {
        @ForeignKey(
                entity = University.class,
                parentColumns = "id",
                childColumns = "university"
        ),
        @ForeignKey(
                entity = Department.class,
                parentColumns = "id",
                childColumns = "department"
        )
})
public class Author {

    @PrimaryKey(autoGenerate = true)
    private Integer id;
    @NonNull
    private String firstName;
    @NonNull
    private String lastName;
    @NonNull
    private String email;
    @NonNull
    private Integer university;
    @NonNull
    private Integer department;
    private String phone;
    private String mobile;
    private String profile;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setUniversity(Integer university) {
        this.university = university;
    }

    public Integer getUniversity() {
        return university;
    }

    public void setDepartment(Integer department) {
        this.department = department;
    }

    public Integer getDepartment() {
        return department;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPhone() {
        return phone;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getMobile() {
        return mobile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getProfile() {
        return profile;
    }


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        return this.getId() == ((Author) obj).getId();
    }

    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append(this.firstName).append(" ");
        buf.append(this.lastName).append(" ");
        buf.append(this.email).append(" ");
        buf.append(this.university).append(" ");
        buf.append(this.department).append(" ");
        buf.append(this.phone).append(" ");
        buf.append(this.mobile).append(" ");
        buf.append(this.profile).append(" ");
        return buf.toString();
    }

}
universityRepository = new UniversityRepository(this);
universityRepository.getAllUniversitys().observe(this, new Observer<List<University>>() {
    @Override
    public void onChanged(List<University> university) {
        ArrayAdapter<University> universityAdapter = new ArrayAdapter<>(AddNewAuthorActivity.this,
        android.R.layout.simple_list_item_1, university);
        universityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        universityEditText.setAdapter(universityAdapter); 
    }
});

saveButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Author author = new Author();
        author.setFirstName(firstNameEditText.getText().toString());
        author.setLastName(lastNameEditText.getText().toString());
        author.setEmail(emailEditText.getText().toString());
        University university = (University) universityEditText.getSelectedItem();
        author.setUniversity(university.getId()) ;
        Department department = (Department) departmentEditText.getSelectedItem();
        author.setDepartment(department.getId());
        author.setPhone(phoneEditText.getText().toString());
        author.setMobile(mobileEditText.getText().toString());
        author.setProfile(profileEditText.getText().toString());
        authorRepository.insert(author);
        finish();
    }
});
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Author author = authors.get(position);
    holder.idTextView.setText(String.valueOf(author.getId()));
    holder.firstNameTextView.setText(String.valueOf(author.getFirstName()));
    holder.lastNameTextView.setText(String.valueOf(author.getLastName()));
    holder.emailTextView.setText(String.valueOf(author.getEmail()));
    holder.universityTextView.setText(String.valueOf(author.getUniversity()));
    holder.departmentTextView.setText(String.valueOf(author.getDepartment()));
    holder.phoneTextView.setText(String.valueOf(author.getPhone()));
    holder.mobileTextView.setText(String.valueOf(author.getMobile()));
    holder.profileTextView.setText(String.valueOf(author.getProfile()));
}
University.java:

import androidx.room.Entity;
import androidx.room.PrimaryKey;
import java.io.Serializable;
import androidx.annotation.NonNull;


@Entity(tableName = "university", foreignKeys = {
})
public class University implements Serializable {

    @PrimaryKey(autoGenerate = true)
    private Integer id;
    @NonNull
    private String name;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        return this.getId() == ((University) obj).getId();
    }

    @Override
    public String toString(){
        StringBuffer buf = new StringBuffer();
        buf.append(this.name).append(" ");
        return buf.toString();
    }

}
结果表明我正在接近我想要的,但唯一的问题是我不知道如何实现以下目标:

package com.app.entity.author;

import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import androidx.annotation.NonNull;

import com.app.entity.department.Department;
import com.app.entity.university.University;

@Entity(tableName = "author", foreignKeys = {
        @ForeignKey(
                entity = University.class,
                parentColumns = "id",
                childColumns = "university"
        ),
        @ForeignKey(
                entity = Department.class,
                parentColumns = "id",
                childColumns = "department"
        )
})
public class Author {

    @PrimaryKey(autoGenerate = true)
    private Integer id;
    @NonNull
    private String firstName;
    @NonNull
    private String lastName;
    @NonNull
    private String email;
    @NonNull
    private Integer university;
    @NonNull
    private Integer department;
    private String phone;
    private String mobile;
    private String profile;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setUniversity(Integer university) {
        this.university = university;
    }

    public Integer getUniversity() {
        return university;
    }

    public void setDepartment(Integer department) {
        this.department = department;
    }

    public Integer getDepartment() {
        return department;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPhone() {
        return phone;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getMobile() {
        return mobile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public String getProfile() {
        return profile;
    }


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        return this.getId() == ((Author) obj).getId();
    }

    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append(this.firstName).append(" ");
        buf.append(this.lastName).append(" ");
        buf.append(this.email).append(" ");
        buf.append(this.university).append(" ");
        buf.append(this.department).append(" ");
        buf.append(this.phone).append(" ");
        buf.append(this.mobile).append(" ");
        buf.append(this.profile).append(" ");
        return buf.toString();
    }

}
universityRepository = new UniversityRepository(this);
universityRepository.getAllUniversitys().observe(this, new Observer<List<University>>() {
    @Override
    public void onChanged(List<University> university) {
        ArrayAdapter<University> universityAdapter = new ArrayAdapter<>(AddNewAuthorActivity.this,
        android.R.layout.simple_list_item_1, university);
        universityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        universityEditText.setAdapter(universityAdapter); 
    }
});

saveButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Author author = new Author();
        author.setFirstName(firstNameEditText.getText().toString());
        author.setLastName(lastNameEditText.getText().toString());
        author.setEmail(emailEditText.getText().toString());
        University university = (University) universityEditText.getSelectedItem();
        author.setUniversity(university.getId()) ;
        Department department = (Department) departmentEditText.getSelectedItem();
        author.setDepartment(department.getId());
        author.setPhone(phoneEditText.getText().toString());
        author.setMobile(mobileEditText.getText().toString());
        author.setProfile(profileEditText.getText().toString());
        authorRepository.insert(author);
        finish();
    }
});
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Author author = authors.get(position);
    holder.idTextView.setText(String.valueOf(author.getId()));
    holder.firstNameTextView.setText(String.valueOf(author.getFirstName()));
    holder.lastNameTextView.setText(String.valueOf(author.getLastName()));
    holder.emailTextView.setText(String.valueOf(author.getEmail()));
    holder.universityTextView.setText(String.valueOf(author.getUniversity()));
    holder.departmentTextView.setText(String.valueOf(author.getDepartment()));
    holder.phoneTextView.setText(String.valueOf(author.getPhone()));
    holder.mobileTextView.setText(String.valueOf(author.getMobile()));
    holder.profileTextView.setText(String.valueOf(author.getProfile()));
}

在“添加”活动中,我希望微调器仅包含大学名称而不是整个对象,在适配器中,当用户列出作者数据时,我希望返回大学名称而不仅仅是id,很抱歉问这么简单的问题,但我是Android新手,在谷歌上寻找这样的案例已经好几天了,但运气不好。

你能展示一下大学课堂吗?@Nhấ蒋:我在问题中加了一个类