اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم ورحمة الله وبركاته 

استخدم ملف او نموذج sharedPreferences لحفظ بيانات المستخدم من صفحة login بمعنى اول من يدخل التطبيق المستخدم اخذ البيانات التي احتاجها واحفظها من اجل استخدامها في التطبيق مثل بيانات العضو والحظر وباقي الاجراءات والامور ناجح تمام ولكن لدي مشكلة بسيطه 

انا اقوم بستدعاء sharedPreferences الذي هي بداخل كلاس منفصل  الى الصفحة التي احتاجه عن طريق الكود التالي :



    SessionManager sessionManager;


sessionManager = new SessionManager(this);

واقوم بحفظ البيانات اليها من خلال volley على سبيل المثال اذا كانت في صفحة تسجيل الدخول حتى تاخذ البيانات بشكل التالي :

   sessionManager.createSession(name,password,cuntry,photo);

الان قمت باخذ 4 حقول الى ملف sharedPreferences 

 

الى كذا الامر 100%100 الان الى المشكلة 

لو قمت بستدعاء ملف sharedPreferences في صحفة مختلفة ونقول صفحة الملف الشخصي ورغبت بتعديل بيانات العضو ولكن ليس كلها مثلا فقط الاسم طبعا الان ممكن التعديل ولكن لن يتغير الاسم الا اذا قام المستخدم بتسجيل الخروج وانتهت جلست sharedPreferences ورجع يدخل بيكون قد تحدث اسمه في التطبيق ولو حاولت اني اضيف السطر التالي الى volley الخاصة بتحديث الملف :

   sessionManager.createSession(name);

سيظهر لدي الخطاء التالي:

'createSession(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' in 'com.example.myapplication.SessionManager' cannot be applied to '(java.lang.String)'

وهو يطالبني بحفظ جميع الحقول مثل ما حدث في صحفة تسجيل الدخول ولكن انا احتياجي لتحديث الاسم فقط الان

فكيف استطيع فعل ذلك ؟وتحديث الحقل المطلوب فقط بدون ان تتاثر باقي الحقول المحفوظة في sharedPreferences

مرفق لكم نموذج من ملف كلاس sharedPreferences كالتالي :

public class SessionManager {

    SharedPreferences Preferences;
    public SharedPreferences.Editor editor;
    public Context context;
    int PRIVATE_MODE = 0;

    private static final String PREF_NAME = "LOGIN";
    private static final String LOGIN = "IS_LOGIN";
    public static final String NAME = "NAME";
  

  

    public SessionManager(Context context) {
        this.context = context;
        sharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = sharedPreferences.edit();
    }
    public void createSession(String name, String phone,String UsersdId){

        editor.putBoolean(LOGIN, true);
        editor.putString(NAME, name);
        
       editor.putString(ID, UsersdId);
        editor.apply();
    }

   
    


    public HashMap<String, String> getUserDetail(){
        HashMap<String, String> user = new HashMap<>();
        user.put(NAME, sharedPreferences.getString(NAME, null));
        user.put(ID, sharedPreferences.getString(ID, null));

 
        return user;
    }



    


}

 

كيف سيتم كتابة هذا السطر :

   sessionManager.createSession(name);

ام انا في حاجه الى استبداله بسطر مختلف ؟

تم التعديل في بواسطة مروان مروان3

Recommended Posts

  • 1
نشر
بتاريخ 13 دقائق مضت قال مروان مروان3:

سيظهر لدي الخطاء التالي:


'createSession(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' in 'com.example.myapplication.SessionManager' cannot be applied to '(java.lang.String)'

 

مرحباً مروان ..
لم أفهم بشكل جيد لكن بطبيعة الحال سيظهر لك هذا الخطأ لأن الدالة أو الإقتران createSession ينتظر منك تمرير 3 parameters و أنت قمت بتمرير parameter واحد فقط و الحل إما تمرير كافة القيم بجلبها من sharedPreferences و تمريرها إلى الدالة و تغيير فقط قيمة الإسم أو إنشاء دالة جديدة ب parameter واحد بهذا الشكل :

public void createSession(String name){
  editor.putString(NAME, name);
  editor.apply();
}

و قُم بإستعمالها.

بالتوفيق

  • 0
نشر
بتاريخ 22 ساعات قال عبود سمير:

مرحباً مروان ..
لم أفهم بشكل جيد لكن بطبيعة الحال سيظهر لك هذا الخطأ لأن الدالة أو الإقتران createSession ينتظر منك تمرير 3 parameters و أنت قمت بتمرير parameter واحد فقط و الحل إما تمرير كافة القيم بجلبها من sharedPreferences و تمريرها إلى الدالة و تغيير فقط قيمة الإسم أو إنشاء دالة جديدة ب parameter واحد بهذا الشكل :


public void createSession(String name){
  editor.putString(NAME, name);
  editor.apply();
}

و قُم بإستعمالها.

بالتوفيق

هلا بيك اخي

بنسبه الى الحل الاول بمعنى اجيبهم مثل ما كانو سابقا وارجعهم مثل ما هم من جديد؟

اما الثاني لو استخدمته بيكون لدى اكثر من داله واثنى دخول المستخدم بحتاج اني احفظ القيم باكثر من داله بمعنى سيصبح الكود اطول كثير ومتشعبنا

ساجرب الاول وساخبرك بنتيجة باذن الله

شكرا لك عزيزي

  • 0
نشر (معدل)

@عبود سمير

قمت بعمل قتل للاكتفتي السابق في وقت خروج المستخدم وقد نجح الامر شكر لك عزيزي

 

للفائدة فقط في وقت اغلاق الاكتفتي لعمل التحديث نعمل 

Intent intent = new Intent(Activity1.this, Activity2.class);
        startActivity(intent);
        finish();

 

تم التعديل في بواسطة مروان مروان3

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...