অ্যান্ড্রয়েডের পছন্দসইটি থেকে আমি কীভাবে ভাগ করা পছন্দগুলি পেতে পারি?


373

আমি আমার অ্যাপ্লিকেশনটির জন্য কিছু সেটিংস দেখানোর জন্য একটি পছন্দেরঅ্যাক্টিভিটি ব্যবহার করছি। আমি একটি এক্সএমএল ফাইলের মাধ্যমে সেটিংসটি স্ফীত করছি যাতে আমার অনক্রিট (এবং সম্পূর্ণ শ্রেণীর পদ্ধতিগুলি) এর মতো দেখায়:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

এর javadoc PreferenceActivity PreferenceFragment যে

ব্যবহারকারীরা তাদের সাথে যোগাযোগ করার সাথে সাথে এই পছন্দগুলি স্বয়ংক্রিয়ভাবে ভাগ করা পছন্দগুলিতে সংরক্ষণ করবে। এই ক্রিয়াকলাপে অগ্রাধিকারের স্তরক্রমটি ব্যবহার করা হবে এমন ভাগ করা পছন্দসইগুলির একটি উদাহরণ পুনরুদ্ধার করতে, এই ক্রিয়াকলাপের একই প্যাকেজের প্রসঙ্গ সহ getDefaultSharedPreferences (android.content.Context) কল করুন।

তবে আমি কীভাবে অন্য ক্রিয়াকলাপে অংশীদারিত্বের নাম পাই? আমি কেবল কল করতে পারি

getSharedPreferences(name, mode)

অন্যান্য ক্রিয়াকলাপে তবে আমার SharedPreferences নামটি প্রয়োজন যা পছন্দনীয় কার্যকলাপ দ্বারা ব্যবহৃত হয়েছিল। নাম কী বা আমি কীভাবে এটি পুনরুদ্ধার করতে পারি?

উত্তর:


721
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

হালনাগাদ

ভাগ করা পছন্দ অনুসারে | অ্যান্ড্রয়েড বিকাশকারী টিউটোরিয়াল (পার্ট 13) সাঁ গীতা এমএন দ্বারা লিখেছেন,

অনেক অ্যাপ্লিকেশন নির্দিষ্ট অ্যাপ্লিকেশন বা কোনও ক্রিয়াকলাপের সেটিংসে ব্যবহারকারীর পছন্দগুলি ক্যাপচার করার জন্য একটি উপায় সরবরাহ করতে পারে। এটি সমর্থন করার জন্য, অ্যান্ড্রয়েড একটি সহজ সেট করে এপিআই।

পছন্দগুলি সাধারণত নাম মান জোড়। এগুলিকে একটি অ্যাপ্লিকেশনে বিভিন্ন ক্রিয়াকলাপ জুড়ে "ভাগ করা পছন্দসই" হিসাবে সংরক্ষণ করা যেতে পারে (নোট বর্তমানে এটি প্রক্রিয়া জুড়ে ভাগ করা যায় না)। বা এটি এমন কোনও কিছু হতে পারে যা কোনও ক্রিয়াকলাপের সাথে সুনির্দিষ্টভাবে সংরক্ষণ করা দরকার।

  1. ভাগ করা পছন্দসমূহ: ভাগ করা পছন্দগুলি অ্যাপ্লিকেশনগুলির সমস্ত উপাদান (ক্রিয়াকলাপ, পরিষেবাদি ইত্যাদি) দ্বারা ব্যবহার করা যেতে পারে।

  2. ক্রিয়াকলাপ পরিচালিত পছন্দসমূহ: এই পছন্দগুলি কেবলমাত্র নির্দিষ্ট ক্রিয়াকলাপের মধ্যেই ব্যবহার করা যায় এবং অ্যাপ্লিকেশনটির অন্যান্য উপাদানগুলি ব্যবহার করতে পারে না।

ভাগ করা পছন্দসমূহ:

ভাগ করা পছন্দগুলি শ্রেণীর getSharedPreferencesপদ্ধতির সাহায্যে পরিচালিত হয় Context। পছন্দগুলি ডিফল্ট ফাইলে (1) সঞ্চিত থাকে বা আপনি পছন্দগুলি উল্লেখ করতে কোনও ফাইলের নাম (2) নির্দিষ্ট করতে পারেন ।

(1) প্রস্তাবিত উপায়টি হ'ল ফাইলের নাম উল্লেখ না করে ডিফল্ট মোড দ্বারা ব্যবহার করা

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(২) আপনি ফাইলের নাম উল্লেখ করার সময় আপনি উদাহরণটি কীভাবে পাবেন তা এখানে

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEপছন্দগুলির জন্য অপারেটিং মোড। এটি ডিফল্ট মোড এবং এর অর্থ এই যে তৈরি করা ফাইলটি কেবল কলিং অ্যাপ্লিকেশন দ্বারা অ্যাক্সেস করা হবে। সমর্থিত অন্যান্য দুটি পদ্ধতি হ'ল MODE_WORLD_READABLEএবং MODE_WORLD_WRITEABLE। ইন MODE_WORLD_READABLEঅ্যাপ্লিকেশন নির্মিত ফাইল পড়তে পারেন কিন্তু এটি পরিবর্তন করতে পারবে না। MODE_WORLD_WRITEABLEঅন্যান্য অ্যাপ্লিকেশনগুলির ক্ষেত্রেও তৈরি ফাইলটির জন্য লেখার অনুমতি রয়েছে।

শেষ অবধি, একবার আপনার পছন্দসই উদাহরণটি পাওয়া গেলে, আপনি পছন্দগুলি থেকে সঞ্চিত মানগুলি কীভাবে পুনরুদ্ধার করতে পারেন তা এখানে :

int storedPreference = preferences.getInt("storedInt", 0);

পছন্দগুলিতে মান সংরক্ষণ করতে ফাইল SharedPreference.Editorঅবজেক্টটি ব্যবহার করতে হবে। ক্লাসে Editorএকটি নেস্টেড ইন্টারফেস SharedPreference

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

সম্পাদক এছাড়াও পদ্ধতি মত সমর্থন remove()এবং clear()ফাইল থেকে অগ্রাধিকার মান মুছে দিন।

ক্রিয়াকলাপ পছন্দসমূহ:

ভাগ করা পছন্দগুলি অন্যান্য অ্যাপ্লিকেশন উপাদানগুলি ব্যবহার করতে পারে। তবে আপনার যদি অন্য উপাদানগুলির সাথে পছন্দগুলি ভাগ করার প্রয়োজন না হয় এবং ক্রিয়াকলাপের ব্যক্তিগত পছন্দ থাকতে চান তবে আপনি ক্রিয়াকলাপের getPreferences()পদ্ধতির সাহায্যে এটি করতে পারেন । getPreferenceপদ্ধতি ব্যবহার getSharedPreferences()ফাইল অভিরুচি নাম জন্য কার্যকলাপ ক্লাসের নাম দিয়ে পদ্ধতি।

পছন্দগুলি পেতে কোডটি নীচে দেওয়া হল

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

মূল্য সংরক্ষণের কোডটিও ভাগ করা পছন্দগুলির ক্ষেত্রে একই।

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

আপনি ডাটাবেসে ক্রিয়াকলাপের স্টোর সংরক্ষণের মতো অন্যান্য পদ্ধতিও ব্যবহার করতে পারেন। দ্রষ্টব্য অ্যান্ড্রয়েডে একটি প্যাকেজও রয়েছে android.preference। প্যাকেজটি অ্যাপ্লিকেশন অগ্রাধিকার UI প্রয়োগ করতে ক্লাস সংজ্ঞায়িত করে।

আরও কয়েকটি উদাহরণ দেখতে বিকাশকারীদের সাইটে অ্যান্ড্রয়েডের ডেটা স্টোরেজ পোস্টটি দেখুন।


55
+1: আপনি আমার দিনটি বাঁচিয়েছেন .. ইন্টারনেটের টিউটোরিয়াল / উদাহরণগুলির কোনওটিই এ সম্পর্কে বলে না। তারা সমস্ত বিষয়বস্তু বৈশিষ্ট্য এবং কাস্টমাইজেশনের কথা বলে, তবে কীভাবে এটি পড়তে হয় না।
ankitjaininfo

1
উত্তরের আমার আপডেটটি দেখুন এবং ফাইলের নামটি এমন কিছু package.prefsতবে আমি নিশ্চিত নই।
পেন্টিয়াম

1
কোডের জন্য ধন্যবাদ। আমাকে একটি বিভ্রান্ত করছে এমন একটি ছোট্ট জিনিস রয়েছে: SharedPreferences একটি ইন্টারফেস, সুতরাং আসল কোডটি কোথায় প্রয়োগ করা হয় যে কোনও পদ্ধতি কল পরিচালনা করে?
x1886x 13

1
আশা করি আমি পুরো এসই জুড়ে কিছু মূর্খ নার্দের উত্তর / মন্তব্যগুলি পড়ার সময় নষ্ট করার আগে এই এক সপ্তাহ আগে পড়েছি, যারা মনে করেন তারা আসলে জানেন না তখন তারা জানে .. ধন্যবাদ @ পেন্টিয়াম 10, আপনি কি কোনও ব্লগের মালিক, আবার ধন্যবাদ, সত্যিই এটির প্রশংসা করুন :)
সানজিভকন

1
Editor.commit () ব্যবহার করার পরিবর্তে আপনি Editor.apply () ব্যবহার করতে পারেন। পার্থক্য হ'ল প্রতিশ্রুতিবদ্ধ () আপনার পরিবর্তনগুলি সিঙ্ক্রোনজ করে লিখুন এবং প্রয়োগ করুন এগুলি অবিচ্ছিন্নভাবে লিখুন। এটি আপনার ইউআই দ্রুততর করে তোলে।
হাশিম আক্তার

29

যদি আপনার অ্যাক্সেস না থাকে তবে আপনি পরিবর্তে getDefaultSharedPreferenes()ব্যবহার করতে পারেন getSharedPreferences(name, mode), আপনাকে কেবল সঠিক নামটি দিয়ে যেতে হবে।

অ্যান্ড্রয়েড এই নামটি তৈরি করে (সম্ভবত আপনার প্রকল্পের প্যাকেজ নামের উপর ভিত্তি করে?) একটিতে নিম্নলিখিত কোডটি রেখে এবং এটি SettingsActivity onCreate()কী preferencesNameতা দেখে আপনি এটি পেতে পারেন ।

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

স্ট্রিং এর মতো কিছু হওয়া উচিত com.example.projectname_preferences। আপনার কোডে কোথাও এমন হার্ড কোড এবং এটি এতে প্রবেশ করুন getSharedPreferences()এবং আপনার ভাল হওয়া উচিত।


1
ক্রিয়াকলাপের উত্সটি পড়ে: সর্বজনীন ভাগ-পূর্বনির্ধারিত getPreferences (int মোড) {getSharedPreferences (getLocalClassName (), মোড) ফিরে পান; }
তাতারাইজ

22

প্রথমে এই পদ্ধতিগুলি ঘোষণা করুন ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

তারপরে আপনি যখন কোনও প্রিফ রাখতে চান তখন এটিকে কল করুন:

putPref("myKey", "mystring", getApplicationContext());

আপনি যখন একটি প্রিফ পেতে চান তখন এটিকে কল করুন:

getPref("myKey", getApplicationContext());

অথবা আপনি এই অবজেক্টটি https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo ব্যবহার করতে পারেন যা সবকিছু আরও সহজ করে দেয় আরও

উদাহরণ:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

Editor.apply () ব্যবহার করবেন না কেন; ব্যাকগ্রাউন্ডে প্রক্রিয়াজাতকরণের জন্য প্রতিশ্রুতিবদ্ধ না করে
অভি পর্যর্শন

4

সর্বত্র চারপাশে প্রসঙ্গ পাস করা সত্যিই আমাকে বিরক্ত করছে। কোডটি খুব ভার্জোজ এবং নিয়ন্ত্রণহীন হয়ে পড়ে। পরিবর্তে প্রতিটি প্রকল্পে আমি এটি করি ...

public class global {
    public static Activity globalContext = null;

এবং এটিকে মূল ক্রিয়াকলাপে সেট করুন

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

সমস্ত পছন্দ কীগুলি ভাষা স্বাধীন হওয়া উচিত, আমি হতবাক হয়েছি কেউ তা উল্লেখ করেনি।

getText(R.string.yourPrefKeyName).toString()

এখন কোডের এক লাইনে একে একে খুব সহজভাবে কল করুন

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

4
কী ভাষা স্বাধীন করার সুবিধা কী? এগুলি কখনও ব্যবহারকারীকে দেখানো হয় না, তাই না?
জর্ড

1
দয়া করে, godশ্বরের ভালবাসার জন্য, কোনও বিশ্বব্যাপী প্রসঙ্গ হিসাবে কোনও ক্রিয়াকলাপ কখনও ব্যবহার করবেন না। যদি আপনাকে একটি বিশ্বব্যাপী প্রসঙ্গ ব্যবহার করতে হয় তবে দয়া করে একটি কাস্টম অ্যাপ্লিকেশন ক্লাস ব্যবহার করে এটি করুন।
থোরবেন

1
@ থোরবেন রাজি হয়েছেন। বা getApplicationContext()
সোজাভাবে

3

যদি আপনার একটি চেকবক্স থাকে এবং আপনি এটির মানটি পেতে চান তবে কোনও জাভা ফাইলে এটি সত্য / মিথ্যা--

Use--

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

0

আপডেট হয়েছে 2019

আপনি কেবল PowerPreferenceগ্রন্থাগার ব্যবহার করতে পারেন

https://github.com/AliEsaAssadi/Android-Power-Preference

ভাগ করে নেওয়া পছন্দসই উদাহরণ

ডিফল্ট উদাহরণটি পেতে আপনাকে কেবল কল করতে হবে

PowerPreference.getDefaultFile()

অথবা আপনি যদি একটি নির্দিষ্ট পছন্দ ফাইল চান

PowerPreference.getFileByName(fileName)

তথ্য লেখার:

PowerPreference.getDefaultFile().put(key,value)

তথ্য প্রাপ্তি

PowerPreference.getDefaultFile().getString(key,value)

পাওয়ারপ্রেফারেন্স কীভাবে প্রসঙ্গে অংশটি পরিচালনা করে? ভাগ করা প্রিফগুলি পড়ার জন্য একটি প্রসঙ্গে প্রয়োজন, না? আমি অ্যান্ড্রয়েডে নতুন এবং বোঝার চেষ্টা করছি।
ইয়েতি

0

এটি আমার জন্য কাজ করেছিল উত্স কোড অনুসরণ করার চেষ্টা করুন

//Fetching id from shared preferences
    SharedPreferences sharedPreferences;
    sharedPreferences =getSharedPreferences(Constant.SHARED_PREF_NAME, Context.MODE_PRIVATE);
    getUserLogin = sharedPreferences.getString(Constant.ID_SHARED_PREF, "");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.