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

مشكلة استدعاء البيانات من sharedPreferences

Flutter Dev

السؤال

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

اخواني انا استخدم materialBetterSpinner لعرض اختيارات للمستخدم ولكن ما اعرضه هو نصوص للمستخدم مثل الاطفال \ الكبار \ المتوسطين وما شابه اسماء الاقسام في التطبيق 

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

الاطفال=1 

الكبار =2

ولكن التحويل برمجي يعني المستخدم لا يستطيع مشاهدة ما يحدث داخل الكود

ثم اخذ هذا الرقم واقوم بادرجه الى قاعدة البيانات من خلال مكتبة volley 

 

لتوضيح العمليه اعلاه هذا الشكل الكود معي 

 

  String[] SPINNER_DATA = {"Baby","woman " };
    String[] SECOND_ARRAY = {"1","2"};
    MaterialBetterSpinner materialBetterSpinner;
     materialBetterSpinner = (MaterialBetterSpinner) findViewById(R.id.material_spinner1);
        ArrayAdapter<String> adaptermatr = new ArrayAdapter<String>(MAddNewItem.this,android.R.layout.simple_dropdown_item_1line, SPINNER_DATA);
        materialBetterSpinner.setAdapter(adaptermatr);
        materialBetterSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                value = SECOND_ARRAY[position];

            }
        });

واقوم بادرجه الى قاعدة البيانات بشكل التالي :

   private void upload() {

        StringRequest stringRequest = new StringRequest(Request.Method.POST, image_upload_url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            String Response = jsonObject.getString("response");
                        

                           

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                      
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
   
              params.put("Section", value.toString().trim());
            

                return params;
            }
        };
        RequestQueue requestQueue = (RequestQueue) Volley.newRequestQueue(MAddNewItem.this);
        requestQueue.add(stringRequest);


    }

طيب الان لدي مشكلة انا اقوم بحفظ بيانات المدخله من المستخدم في حقول edittext في sharedPreferences عشان لو خرج المستخدم فجاه وفتح التطبيق تكون البيانات موجوده ولمشاكل مختلفة متعدده ايضا 

 

من خلال الكود التالي :

   SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = share.edit();
        edit.putString("token",materialBetterSpinner.getText().toString());
      
        edit.commit();

واستددعي هذا البيانات من جديد من خلال الكود التالي :

      SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);

        materialBetterSpinner.setText(share.getString("token",""));

 

 

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

ولكن ما سيجلبه هو اسم القسم بمعنى سياتي لي ب النص ويعرضه مثل Baby","woman

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

 

المطلوب الان ان يقوم ملف sharedPreferences بعرض النص للمستخدم وهذا الامر يحدث ولكن ان نحفظ الرقم الذي يساويه //الان هو يعرض النص ولكن لو جيت اعمل حفظ لقاعدة البيانات رح يقولي انه الحقل فارغ لنه هو حفظ النص الي موجود داخل sprin فقط وليس النص وقيمة value بحيث انه لم يرجع يستدعي البيانات تكون value تحمل قيمة

 

 

اتمنى  تكون المشكلة واضحه

كيف يمكن حل هذا المشكلة ياليت اذا احد لديه فكره يساعدنا فيها 

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 4 ساعات قال مروان مروان3:

واستددعي هذا البيانات من جديد من خلال الكود التالي :


      SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);

        materialBetterSpinner.setText(share.getString("token",""));

 

مرحباً مروان..
المفروض بعد جلب القيمة من ال sharedPreferences تقوم بعمل setSelection و ليس setText و تقوم بتعديل ال value التي تريد تخزينها في قاعدة البيانات لأنها إفتراضيا فارغة و يكون الكود بهذا الشكل مثلاً 

SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE);

String dataStoredValue = share.getString("token","");

if (dataStoredValue != null) {
    int spinnerPosition = adaptermatr.getPosition(dataStoredValue);
    materialBetterSpinner.setSelection(spinnerPosition);
  	value = SECOND_ARRAY[spinnerPosition];
}

قمْ بتغيير الكود بما يناسبك لأن أهم شيء هو جلب ال position الموافق للنص المخزن في sharedPreferences ثم تغيير القيمة التي تريد تخزينها بإستعمال كود الفولي لأنها إفتراضيا تكون فارغة
بالتوفيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مرحباً أخي @مروان مروان3

بصراحة لم أفهم المشكلة كاملة بالضبط ,لكن يمكنك فقط بدل حفظ النص أن تقوم بحفظ الرقم من خلال sharedPreferences هكذا 

edit.putInt('key',1);

ولإستدعاء ذلك الرقم نقوم بالتالي

share.getInt('key',0);

ولإسناد النص المقابل لذلك الرقم ,أنصحك بعمل switch يقوم بالتأكد من الرقم أو ال position  الخاص ب materialBetterSpinner adapterوإسناد النص بناء على الرقم ,مثال 

switch(share.getInt('key',0)){

case 1:
    materialBetterSpinner.setText("Baby");
break;
case 2:
    materialBetterSpinner.setText("Woman");
break;
  default:
    materialBetterSpinner.setText("Choose Something");

}
بتاريخ 8 ساعات قال مروان مروان3:

ولكن ما سيجلبه هو اسم القسم بمعنى سياتي لي ب النص ويعرضه مثل Baby","woman

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...