Gson ব্যবহার করে ArrayList ↔ JSON ↔ SharedPreferences
SharedPreferences সরাসরি লিস্ট সাপোর্ট করে না। সমাধান: লিস্টকে JSON-এ কনভার্ট করে স্ট্রিং হিসেবে সংরক্ষণ করুন। Gson লাইব্রেরি এটি খুব সহজ করে দেয়।
গ্রেডেল ডিপেন্ডেন্সি
dependencies {
implementation 'com.google.code.gson:gson:2.10.1'
}
সম্পূর্ণ বাস্তবায়ন
public class MainActivity extends AppCompatActivity {
private static final String PREFS_NAME = "USER_PREFS";
private static final String KEY_LIST = "string_list";
private SharedPreferences prefs;
private Gson gson;
private ArrayList<String> dataList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
gson = new Gson();
EditText etName = findViewById(R.id.etName);
EditText etAddress = findViewById(R.id.etAddress);
TextView tvResult = findViewById(R.id.tvResult);
Button btnSave = findViewById(R.id.btnSave);
Button btnRead = findViewById(R.id.btnRead);
btnSave.setOnClickListener(v -> {
String name = etName.getText().toString().trim();
String address = etAddress.getText().toString().trim();
if (name.isEmpty() || address.isEmpty()) {
Toast.makeText(this, "সব ফিল্ড পূরণ করুন", Toast.LENGTH_SHORT).show();
return;
}
dataList.add(name);
dataList.add(address);
String json = gson.toJson(dataList);
prefs.edit().putString(KEY_LIST, json).apply();
Toast.makeText(this, "সেভ হয়েছে", Toast.LENGTH_SHORT).show();
});
btnRead.setOnClickListener(v -> {
String json = prefs.getString(KEY_LIST, "");
if (json.isEmpty()) {
tvResult.setText("কোনো ডেটা নেই");
return;
}
Type type = new TypeToken<List<String>>(){}.getType();
List<String> savedList = gson.fromJson(json, type);
StringBuilder sb = new StringBuilder();
for (String s : savedList) sb.append(s).append("\n");
tvResult.setText(sb.toString());
});
}
}
সেরা অনুশীলন
commit()-এর বদলেapply()ব্যবহার করুন (অ্যাসিঙ্ক্রোনাস, UI ব্লক করে না)।- বড় লিস্টের জন্য Room Database বা DataStore (Jetpack) ভালো।
- কমপ্লেক্স অবজেক্টের জন্য
TypeTokenব্যবহার করুন।