Java 如何在列表视图中保存每个项目的评分?

Java 如何在列表视图中保存每个项目的评分?,java,android,listview,sharedpreferences,ratingbar,Java,Android,Listview,Sharedpreferences,Ratingbar,1.我有一个列表视图,其中包含图像、人名、人的生日。当用户单击某个项目时,将启动一个新活动以显示该项目的详细信息。在这个活动中,我创建了一个评分栏,用户将在其中对每个项目进行评分 2.我尝试使用SharedReferences保存计算出的评分项目的平均值。我发现,当我保存评分并再次启动应用程序时,这些值没有存储在SharedReferences中 我的主要目标是计算每个评分项目的平均值,并将其保存在SharedReferences中 3.人员类别: public class Person

1.我有一个
列表视图
,其中包含图像、人名、人的生日。当用户单击某个项目时,将启动一个新活动以显示该项目的详细信息。在这个活动中,我创建了一个评分栏,用户将在其中对每个项目进行评分

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