কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে SharedPreferences-এ ArrayList সংরক্ষণ করা


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 ব্যবহার করুন।

  1. অ্যান্ড্রয়েডে অন্য অ্যাপ্লিকেশনের SharedPreferences পড়ার পদ্ধতি

  2. অ্যান্ড্রয়েড অ্যাপের SharedPreferences ডেটা মুছে ফেলার পদ্ধতি

  3. অ্যান্ড্রয়েডে Gmail অ্যাট্যাচমেন্ট সেভ করার পদ্ধতি

  4. অ্যান্ড্রয়েডে টুইটার থেকে GIF সেভ করুন: দ্রুত ও সহজ গাইড