Java 如何在列表视图中保存每个项目的评分?
1.我有一个Java 如何在列表视图中保存每个项目的评分?,java,android,listview,sharedpreferences,ratingbar,Java,Android,Listview,Sharedpreferences,Ratingbar,1.我有一个列表视图,其中包含图像、人名、人的生日。当用户单击某个项目时,将启动一个新活动以显示该项目的详细信息。在这个活动中,我创建了一个评分栏,用户将在其中对每个项目进行评分 2.我尝试使用SharedReferences保存计算出的评分项目的平均值。我发现,当我保存评分并再次启动应用程序时,这些值没有存储在SharedReferences中 我的主要目标是计算每个评分项目的平均值,并将其保存在SharedReferences中 3.人员类别: public class Person
列表视图
,其中包含图像、人名、人的生日。当用户单击某个项目时,将启动一个新活动以显示该项目的详细信息。在这个活动中,我创建了一个评分栏,用户将在其中对每个项目进行评分
2.我尝试使用SharedReferences
保存计算出的评分项目的平均值。我发现,当我保存评分并再次启动应用程序时,这些值没有存储在SharedReferences
中
我的主要目标是计算每个评分项目的平均值,并将其保存在SharedReferences
中
3.人员类别:
public class PersonInfo {
private int image;
private String name;
private String birthday;
private float rating;
public PersonInfo(int image, String name, String birthday, float rating) {
this.image = image;
this.name = name;
this.birthday = birthday;
this.rating = rating;
}
public float getRating() {
return rating;
}
public void setRating(float rating) {
this.rating = rating;
}
public String getName(){
return name;
}
public int getImage() {
return image;
}
public void setName(String name) {
this.name = name;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
个人适配器:
public class StudentsListAdapter extends ArrayAdapter<PersonInfo>{
private Context contxt;
private int rsrc;
private List<PersonInfo> persons;
private boolean isAdmin;
private TextView pName, pBirthday;
public StudentsListAdapter( Context context, int resource, List<PersonInfo> _persons, boolean _isAadmin) {
super(context, resource, _persons);
contxt = context;
rsrc = resource;
persons=_persons;
isAdmin = _isAadmin;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(contxt);
View view = inflater.inflate(rsrc, null,false);
ImageView imageView = view.findViewById(R.id.imgP);
pName = view.findViewById(R.id.txtView2);
pBirthday = view.findViewById(R.id.txtView3);
PersonInfo p = persons.get(position);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent(contxt,ViewItems.class);
String name = persons.get(position).getName();
String birth = persons.get(position).getBirthday();
intent1.putExtra("name",name);
intent1.putExtra("birth",birth);
contxt.startActivity(intent1);
}
});
imageView.setImageDrawable(contxt.getResources().getDrawable(p.getImage()));
pBirthday.setText(p.getBirthday());
pName.setText(p.getName());
}
return view;
}
主要活动:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private TextView edName,edBirth;
String position;
String ed_name;
String ed_birth;
String username, password;
ArrayList<PersonInfo> students;
ArrayList<PersonInfo> students1;
ListView listView1;
SharedPreferences sharedPref;
SharedPreferences.Editor editor;
float rtBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
students = new ArrayList<>();
students1 = new ArrayList<>();
Intent intent = getIntent();
if(getIntent() != null){
username = intent.getStringExtra("Username");
password = intent.getStringExtra("Password");
edName = findViewById(R.id.txtView2);
edBirth = findViewById(R.id.txtView3);
listView1 = (ListView) findViewById(R.id.li_view);
students1.add(new PersonInfo(android.R.drawable.btn_star, "Test1", "03/27/1998", 3));
students1.add(new PersonInfo(android.R.drawable.btn_star, "Test2", "03/27/1998",2));
students1.add(new PersonInfo(android.R.drawable.btn_star, "Test3", "03/27/1998",1));
students1.add(new PersonInfo(android.R.drawable.btn_star, "Test4", "03/27/1998",5));
test1 = new StudentsListAdapter(
this, R.layout.adapter_view_layout, students1, true);
listView1.setAdapter(test1);
if(username!= null && username.equals("test") && password != null && password.equals("123")){
Log.d(TAG, "onCreate: Started.");
ListView listView = (ListView) findViewById(R.id.li_view);
students.add(new PersonInfo(android.R.drawable.btn_star, "Test1", "03/27/1998", 3));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test2", "03/27/1998",2));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test3", "03/27/1998",1));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test4", "03/27/1998",5));
test1 = new StudentsListAdapter(
this, R.layout.adapter_view_layout, students, true);
listView1.setAdapter(test1);
}
else if (username != null && username.equals("test2") && password != null && password.equals("1234"))
{
ListView listView = (ListView) findViewById(R.id.li_view);
students.add(new PersonInfo(android.R.drawable.btn_star, "Test1", "03/27/1998", 3));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test2", "03/27/1998",2));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test3", "03/27/1998",1));
students.add(new PersonInfo(android.R.drawable.btn_star, "Test4", "03/27/1998",5));
test1 = new StudentsListAdapter(
this, R.layout.adapter_view_layout, students,false);
listView1.setAdapter(test1);
}
SharedPreferences sharedPreferences = getSharedPreferences("SaveRating",Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putFloat("rating_float", rtBar);
editor.apply();
}
}
}
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串TAG=“MainActivity”;
私有文本视图edName,edBirth;
串位置;
字符串ed_name;
串珠出生;
字符串用户名、密码;
ArrayList学生;
ArrayList学生1;
列表视图列表视图1;
SharedPreferences sharedPref;
SharedReferences.Editor;
浮动rtBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
学生=新数组列表();
students1=新数组列表();
Intent=getIntent();
如果(getIntent()!=null){
username=intent.getStringExtra(“用户名”);
password=intent.getStringExtra(“密码”);
edName=findViewById(R.id.txtView2);
edBirth=findviewbyd(R.id.txtView3);
listView1=(ListView)findViewById(R.id.li_视图);
学生1.添加(新PersonInfo(android.R.dravable.btn_star,“Test1”,“03/27/1998”,3));
学生1.添加(新PersonInfo(android.R.dravable.btn_star,“Test2”,“03/27/1998”,2));
学生1.添加(新PersonInfo(android.R.dravable.btn_star,“Test3”,“03/27/1998”,1));
学生1.添加(新PersonInfo(android.R.dravable.btn_star,“Test4”,“03/27/1998”,5));
test1=新学生适应程序(
这,R.layout.adapter\u view\u layout,students1,true);
listView1.setAdapter(test1);
如果(username!=null&&username.equals(“测试”)&&password!=null&&password.equals(“123”)){
d(标记“onCreate:Started”);
ListView ListView=(ListView)findViewById(R.id.li\u视图);
添加(新PersonInfo(android.R.dravable.btn_star,“Test1”,“03/27/1998”,3));
添加(新PersonInfo(android.R.dravable.btn_star,“Test2”,“03/27/1998”,2));
添加(新PersonInfo(android.R.dravable.btn_star,“Test3”,“03/27/1998”,1));
添加(新PersonInfo(android.R.dravable.btn_star,“Test4”,“03/27/1998”,5));
test1=新学生适应程序(
这,R.layout.adapter\u view\u layout,student,true);
listView1.setAdapter(test1);
}
如果(username!=null&&username.equals(“test2”)&&password!=null&&password.equals(“1234”))
{
ListView ListView=(ListView)findViewById(R.id.li\u视图);
添加(新PersonInfo(android.R.dravable.btn_star,“Test1”,“03/27/1998”,3));
添加(新PersonInfo(android.R.dravable.btn_star,“Test2”,“03/27/1998”,2));
添加(新PersonInfo(android.R.dravable.btn_star,“Test3”,“03/27/1998”,1));
添加(新PersonInfo(android.R.dravable.btn_star,“Test4”,“03/27/1998”,5));
test1=新学生适应程序(
这个,R.layout.adapter\u view\u layout,student,false);
listView1.setAdapter(test1);
}
SharedReferences SharedReferences=GetSharedReferences(“保存评级”,Context.MODE\u PRIVATE);
editor=SharedReferences.edit();
编辑:putFloat(“评级浮动”,rtBar);
editor.apply();
}
}
}
我做错了什么
任何帮助都将不胜感激。
谢谢大家! 你甚至不想保存任何东西。你只要把它放在酒吧里就行了
editor.putFloat(“评级浮动”,rtBar)代码>
这甚至没有初始化,但如果这是一种原始类型的数据,它有默认值0
我想你忘了初始化rtBar,正如@Eugene告诉你的那样。您可以通过获取所有学生的平均值来初始化它:
for (PersonInfo personInfo : students) {
rtBar += personInfo.getRating();
}
// now store it in sharedPrefs
您好@EugeneTroyanskii,我已经在MainActivity中将rtBar初始化为全局变量,使其浮动rtBar=0;调试时,在设置速率后,我在速率项目中获得正确的结果。但是我想在SharedReferences中存储每个项目的速率,这样当我关闭应用程序并打开时,我可以看到项目的保存速率。请看一下调试结果,谢谢@FearLessAZ使用数据库或后端部件存储项目。共享引用是一个错误的选择。这部分myRating=SharedReferences.getFloat(“rating_float”,0f);始终为0,所以我不知道结果是否正确:D
for (PersonInfo personInfo : students) {
rtBar += personInfo.getRating();
}
// now store it in sharedPrefs