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 }

浙公网安备 33010602011771号