GetDefaultSharedPreferences এবং getSharedPreferences মধ্যে পার্থক্য


224

অ্যান্ড্রয়েড getDefaultSharedPreferencesএবং এর getSharedPreferencesমধ্যে পার্থক্য কী ? কেউ দয়া করে ব্যাখ্যা করতে পারেন?


প্রায় খুব স্পষ্ট পার্থক্য হ'ল একটি স্থির এবং একটি নয়। তবে এটি সত্যিই গুরুত্বপূর্ণ নয়, যেহেতু Contextকোনও একটিকে কল করার জন্য আপনার একটি উদাহরণ প্রয়োজন ।
LarsH

উত্তর:


224

getDefaultSharedPreferences"com.example.something_preferences" এর মতো একটি ডিফল্ট নাম ব্যবহার করবে তবে একটি নামের প্রয়োজনgetSharedPreferences হবে ।

getDefaultSharedPreferencesপ্রকৃতপক্ষে ব্যবহারগুলি Context.getSharedPreferences(নীচে সরাসরি অ্যান্ড্রয়েড উত্স থেকে এসেছে):

public static SharedPreferences getDefaultSharedPreferences(Context context) {
    return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
        getDefaultSharedPreferencesMode());
}

private static String getDefaultSharedPreferencesName(Context context) {
    return context.getPackageName() + "_preferences";
}

private static int getDefaultSharedPreferencesMode() {
    return Context.MODE_PRIVATE;
}

9
খারাপ getDefaultSharedPreferencesNameসর্বজনীন নয় যেমন নাম ব্যাকআপ জন্য প্রয়োজন হয় / ফ্রেমওয়ার্ক ফিরিয়ে আনুন।
মার্টিন 14


এবং পছন্দের জন্য কাস্টম নাম ব্যবহার করে getSharedPreferences মোডে কীভাবে অগ্রাধিকার পরিবর্তন শুনতে পাবেন? (getSharedPreferences "com.example.something_preferences" এর মতো ডিফল্ট নাম ব্যবহার করবেন না)
ডঃ জ্যাকি

আপনি কি উত্সটিতে একটি লিঙ্ক যুক্ত করতে পারেন?
মিস্টার_আর_আমস_ডি

@ মিঃ_আর_আমস_ডি এটি সন্ধান করা আরও সহজ। আমি যদি একটি লিঙ্ক যুক্ত করি তবে এটি একটি নির্দিষ্ট এপিআই সংস্করণে হবে যা আপনি যা খুঁজছেন তা হতে পারে বা নাও পারে।
কোপোলি

120

আসুন পার্থক্যের মূল বিষয়গুলি পর্যালোচনা করুন:

  1. getDefaultSharedPreferences()একটি ডিফল্ট পছন্দ-ফাইল নাম ব্যবহার করে। এই ডিফল্ট অ্যাপ্লিকেশন প্রতি সেট করা হয়েছে, তাই একই অ্যাপ্লিকেশন প্রসঙ্গে সমস্ত ক্রিয়াকলাপ নীচের উদাহরণের মতো সহজেই এটি অ্যাক্সেস করতে পারে:

    SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
    if (spref.contains("email")) {
         String sEmailAddr = spref.getString("email", "");
    }
    

    পছন্দগুলি সাধারণত সংরক্ষণ করা হয় /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml

  2. বিকল্প পদ্ধতি - getSharedPreferences(name,mode)একটি নির্দিষ্ট পছন্দ (ফাইল) নাম এবং একটি অপারেশন মোড (যেমন ব্যক্তিগত, ওয়ার্ল্ড_ড্রেডেবল, ইত্যাদি) নির্দেশ করতে হবে requires

কোপোলাই দ্বারা উল্লিখিত হিসাবে, ফলাফলটি একই রকম, তবে প্রথম বিকল্পটি সহজ এবং একাধিক পছন্দসই ফাইলগুলিতে বিভক্ত হওয়ার নমনীয়তার অভাব রয়েছে, এটি দ্বিতীয় বিকল্প দ্বারা দেওয়া getSharedPreferences()। একটি MODE_WORLD_READABLE অপারেশন সূচক ব্যবহার করে অ্যাপ্লিকেশনগুলির মধ্যে পছন্দগুলি ভাগ করে নেওয়াও এমন কিছু সম্ভব যা ব্যবহার করা সম্ভব getSharedPreferences()তবে এটি খুব কমই ব্যবহৃত হয়।

আইএমএইচও, getDefaultSharedPreferences()টাইপস এবং বিভ্রান্তির ঝুঁকিপূর্ণ একাধিক পছন্দ ফাইল ফাইলগুলির বিভ্রান্তির মধ্যে না গিয়ে নিরাপদে ব্যবহার করা যেতে পারে, আপনি যদি না চান যে আপনার অ্যাপের বিভিন্ন মডিউল বিভিন্ন পছন্দ ফাইল ব্যবহার করবে। সাধারণত এটির প্রয়োজন হয় না। যদি কোনও অ্যাপ্লিকেশনটিকে অনেকগুলি পরামিতি সঞ্চয় করতে হয় তবে সম্ভবত বাহ্যিক ডাটাবেস ব্যবহার করা আরও ভাল হবে কারণ এটি আরও ভাল ডেটা সুরক্ষা সরবরাহ করে।

যদি কেউ নিয়মিত getSharedPreferences () এবং getDefaultSharedPreferences () না ব্যবহার করার কোনও ভাল কারণ জানেন তবে দয়া করে এখানে মন্তব্য করে আমাকে জানান।



1
এবং পছন্দের জন্য কাস্টম নাম ব্যবহার করে getSharedPreferences মোডে কীভাবে অগ্রাধিকার পরিবর্তন শুনতে পাবেন? (getSharedPreferences "com.example.something_preferences" এর মতো ডিফল্ট নাম ব্যবহার করবেন না)
ডঃ জ্যাকি

ডঃ জ্যাকি আমি বলব যে আপনি নিজের পছন্দগুলি কোনও ধরণের সেশন-জাতীয় বস্তুতে গুটিয়ে রাখবেন: শ্রেণি সেশন {prefs = getSharedPreferences () ...} এবং তারপরে আপনি যে বিষয়গুলি পর্যবেক্ষণ করতে চান তার জন্য গেটর এবং সেটার ব্যবহার করবেন। যখন সেটারগুলি কল করা হয়, আপনি সেটার যুক্তিতে ইভেন্টগুলি ট্রিগার করতে পারেন।
অ্যালেক্স ওয়েওয়ার

2

আমি জানি এই পোস্টটি কিছুটা পুরানো, তবে ভি 7 সমর্থন লাইব্রেরির 24.0.1 সাল থেকে আপনি যে কোনও জায়গায় প্রসঙ্গ দ্বারা ডিফল্ট পছন্দগুলি পুনরুদ্ধার করতে পারবেন

// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)

Https://developer.android.com/references/android/support/v7/preferences/PreferencesManager#getdefaultsharedpreferences দেখুন


অ্যানড্রয়েড কিউতে প্রেফাইম্যানেজারটিকে অবহেলা করা হচ্ছে You আপনি এখনও প্রসঙ্গের বিষয়গুলি ব্যবহার করতে পারেন get Context.getSharedPreferences ( "$ {packagename} _preferences", MODE_PRIVATE) এর এই কলে পরিবর্তিত
কেভিন

2
দেখে মনে হচ্ছে পছন্দসই ম্যানেজারটিকে কেবলমাত্র অ্যান্ড্রিক্সে স্থানান্তরিত করা হচ্ছে হ্রাস করা হচ্ছে। বিকাশকারী.অ্যান্ড্রয়েড.
com

1

তৃতীয় ফাংশনও রয়েছে:

public SharedPreferences Activity.getPreferences(int mode) {}

আমার প্রশ্নোত্তরটি এখানে দেখুন: অ্যান্ড্রয়েডের ভাগ করা পছন্দগুলি নিয়ে গণ্ডগোল - কোন ফাংশনটি ব্যবহার করতে হবে?


এটি ক্রিয়াকলাপ উত্স কোড থেকে getSharedPreferences () জন্য একটি মোড়ক: সর্বজনীন SharedPreferences getPreferences (int মোড) {getSharedPreferences (getLocalClassName (), মোড); }
টার্ন

1

GetSharedPreferences () এবং getDefaultSharedPreferences () উভয়ই অ্যাপ্লিকেশন স্তরের পছন্দগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। getDefaultSharedPreferences () ব্যবহার করা আরও ভাল কারণ এটি SharedPreferences অবজেক্ট দেয় যা ডিফল্টরূপে পছন্দক্রমের সাথে কাজ করে।


0

সচেতন হন যে ডিফল্ট ভাগ করা পছন্দগুলি আপনার প্যাকেজের নামের সাথে ভাগ করা পছন্দগুলি ব্যবহার করার মতো নয় :

context.getSharedPreferences(getPackageName(), MODE_PRIVATE);

=> ভাগ করা পছন্দগুলির নাম: " com.my.packagename "

PreferenceManager.getDefaultSharedPreferences(context);

=> ভাগ করা পছন্দগুলির নাম: " com.my.packagename_preferences "

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.