SharedPreferences 数据传输中遇到的一些问题总结

原构想:MainActivity 设置两个按钮,btn1——跳转Main2Activity通过复选框组选择并提交,btn2——跳转Main3Activity通过RecycleView显示选择结果。

主要经验:SharedPreferences 使用前要先声明,否则读取为Null;

1、Main2Activity.java

 1 package com.example.newrecycleviewdate;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.content.Intent;
 6 import android.content.SharedPreferences;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.widget.Button;
10 import android.widget.CheckBox;
11 
12 import java.util.ArrayList;
13 import java.util.List;
14 
15 public class Main2Activity extends AppCompatActivity {
16     private CheckBox chk;
17     private Button gotobtn;
18     private int[] id={R.id.ck1,R.id.ck2,R.id.ck3,R.id.ck4,R.id.ck5,R.id.ck6,R.id.ck7,R.id.ck8,R.id.ck9,R.id.ck10};   数组储存重复的复选框ID,减少键盘磨损~
19     private List<String> list=new ArrayList<>();
20     SharedPreferences.Editor editor;                  //Editer 需先声明,否则取出数据为Null;
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main2);
26 
27         gotobtn=findViewById(R.id.gotobtn);
28 
29         gotobtn.setOnClickListener(new View.OnClickListener() {
30             @Override
31             public void onClick(View v) {
32                 for (int i :id){                                   //循环检查复选框状态,选中则加入数组中
33                     chk = findViewById(i);
34                     if (chk.isChecked())
35                         list.add(chk.getText().toString());
36                 }
37                 editor = getSharedPreferences("nameList",MODE_PRIVATE).edit();
38 
39                 editor.putInt("listsize",list.size());
40 
41 
42                 for (int i=0 ;i< list.size();i++){
43                     editor.putString("item"+i,list.get(i));
44                }
45 
46 
47                 editor.commit();
48                 startActivity(new Intent(Main2Activity.this,MainActivity.class));
49             }
50         });
51 
52 
53 
54 
55     }
56 }

2、Main3Activity

 1 package com.example.newrecycleviewdate;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 import androidx.recyclerview.widget.LinearLayoutManager;
 5 import androidx.recyclerview.widget.RecyclerView;
 6 import androidx.recyclerview.widget.StaggeredGridLayoutManager;
 7 
 8 import android.content.SharedPreferences;
 9 import android.os.Bundle;
10 import android.widget.TextView;
11 
12 import java.util.ArrayList;
13 import java.util.Arrays;
14 import java.util.List;
15 
16 public class Main3Activity extends AppCompatActivity {
17     private RecyclerView resultRy;
18     private List<String> data = new ArrayList<>();
19     private int count;
20     //private String[] st={"strind","33fi","33022","dvikeke","88vj3k"};
21     SharedPreferences myNum;                //SharedPreferences 先声明,否则出现取出数据为空的情况
22     private MyRecycleAdapter myRecycleAdapter;          
23 
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity_main3);
28 
29         resultRy = findViewById(R.id.resultRy);
30         count=0;
31 
32          myNum = getSharedPreferences("nameList",MODE_PRIVATE);
33 
34         count= myNum.getInt("listsize",0);
35         for (int i =0;i<count;i++){
36            data.add(myNum.getString("item"+i,"fale"));
37 
38         }
39 
40 
41 
42 
43         myRecycleAdapter = new MyRecycleAdapter(Main3Activity.this, data);
44         LinearLayoutManager manager=new LinearLayoutManager(this);
45         StaggeredGridLayoutManager stagger = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
46         resultRy.setLayoutManager(stagger);
47         resultRy.setAdapter(myRecycleAdapter);
48 
49 
50 
51     }
52 }

 

posted @ 2021-01-17 22:27  写BUG的猪  阅读(297)  评论(0)    收藏  举报