رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فراخوانی مقدار SharedPreferences (حل شد)
#1
من یک فایل به اسم Prefs.java ساختم و این کد رو داخلش نوشتم


package com.example.myapp5;

 import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("name","ali" );
        editor.commit();





    }
}




یک اکتویتی هم به اسم MyActivity دارم که در اصل اکتویتی شروع اپلکشن هست .


package com.example.myapp5;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;




public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);







        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        String myString = sharedPreferences.getString("name", "emptyValue");

        TextView t = (TextView) findViewById(R.id.textView1);
        t.setText(myString);


    }
}





نمی دونم چرا هر مثالی که تست کردم ، از سایتهای فارسی کلیدستان ، سایت های خارجی و .. تو هیچ کدوم موفق نشدم
مقدار Ali رو از name بخونم ، تو همه مثالها مقداری که داخل Tetxview دیده شد ، پارامتر دوم این خط پایین هست ، مثلا تو کد بالا جیزی که تو Textview دیده میشه ،emptyvalue هست


        String myString = sharedPreferences.getString("name", "emptyValue");


اشکال کد کجاست ؟
پاسخ
تشکر شده توسط:
#2
اون مقدار emptyValue که برمیگردونه در اصل مقدار پیشفرض هستش که در صورتی که name وجود نداشته باشه اون فراخوانی میشه پس توی تعریف و مقدار دهی مشکل وجود داره
شما از کد زیر استفاده کنید که براتون ویرایش کردم


package com.example.myapp5;

 import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        SharedPreferences SP = getApplicationContex().getSharedPreferences("username",0);
Editor editSP = SP.edit();
editSP.putString("name","ali");
editSP.commit();


    }
}




خب توی این اکتیویتی مقدار دهی کردیم حالای توی اکتیویتی دیگه به این شکل دریافتش میکنم:

package com.example.myapp5;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;




public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

SharedPreferences SP = getApplicationContex().getSharedPreferences("username",0);
String myString = SP.getString("name","Default");


        
        TextView t = (TextView) findViewById(R.id.textView1);
        t.setText(myString);


    }
}



فقط من چون از IDE واسه کد نوشتن استفاده نکردم و حفظی نوشتم دستوراتو ممکنه مشکل سینتکسی باشه شما تست کنین اگه مشکلی داشت بگین تا درستش کنم یا توضیحی خواستین بگم
پاسخ
تشکر شده توسط: بیتا_حکمت
#3
اینو تست کنید:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
پاسخ
تشکر شده توسط: بیتا_حکمت
#4
(31-06-1394، 02:28 ق.ظ)peca نوشته: اون مقدار emptyValue که برمیگردونه در اصل مقدار پیشفرض هستش که در صورتی که name وجود نداشته باشه اون فراخوانی میشه پس توی تعریف و مقدار دهی مشکل وجود داره
شما از کد زیر استفاده کنید که براتون ویرایش کردم


package com.example.myapp5;

 import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        SharedPreferences SP = getApplicationContex().getSharedPreferences("username",0);
Editor editSP = SP.edit();
editSP.putString("name","ali");
editSP.commit();


    }
}




خب توی این اکتیویتی مقدار دهی کردیم حالای توی اکتیویتی دیگه به این شکل دریافتش میکنم:

package com.example.myapp5;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;




public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

SharedPreferences SP = getApplicationContex().getSharedPreferences("username",0);
String myString = SP.getString("name","Default");


        
        TextView t = (TextView) findViewById(R.id.textView1);
        t.setText(myString);


    }
}



فقط من چون از IDE واسه کد نوشتن استفاده نکردم و حفظی نوشتم دستوراتو ممکنه مشکل سینتکسی باشه شما تست کنین اگه مشکلی داشت بگین تا درستش کنم یا توضیحی خواستین بگم

بی نهایت ممنون بابت زحمتی که کشیدین .
مطابق کدهای شما به این صورت نوشتم ، اما متاسفانه بازهم مقدار پیش فرض برگردونده  شد
پ ن : وقتی مستقیما کدها رو کپی کردم چد خط خطا داد ، مجبور شدم یکم تغییرش بدم



//********Prefs.java


package com.example.myapp6;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       SharedPreferences SP = getApplicationContext().getSharedPreferences("username",0);
       SharedPreferences.Editor editSP = SP.edit();
       editSP.putString("name","ali");
       editSP.commit();




   }
}




کدهای اکتویتی


package com.example.myapp6;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;

public class MyActivity extends Activity {
   /**
    * Called when the activity is first created.
    */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       SharedPreferences SP = getApplicationContext().getSharedPreferences("username",0);
       String myString = SP.getString("name","Default");



      TextView t = (TextView) findViewById(R.id.textView1);
       t.setText(myString);
   }
}



پاسخ
تشکر شده توسط:
#5
(31-06-1394، 09:00 ق.ظ)ADMIN نوشته: اینو تست کنید:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

ممنونم استاد ، اما به این صورت تغییر دادم (اگر منظورتونو متوجه شده باشم ) ولی بازم مقدار پیش فرض رو برگردوند



        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        String myString = prefs.getString("name", "emptyValue");

        TextView t = (TextView) findViewById(R.id.textView1);
        t.setText(myString);






اینم بگم اکتوینی دوم ، لی آوت نداره هر چند بعید بدونم ربطی داشته باشه ..
پاسخ
تشکر شده توسط:
#6
این قسمتشو تازه دیدم

کد:
public class Prefs extends PreferenceActivity

شما همون کلاستون رو مثل اکتیویتی های معمولی تعریف کنین
یعنی اون خط رو تغییرش بدین به:

کد:
public class Prefs extends Activity

فقط لایبرریشم اضافه کنین بعد باید این اکتیویتی یبار اجرا بشه اول تا مقدار دهی انجام بگیره
پاسخ
تشکر شده توسط: بیتا_حکمت
#7
دقیقا مشکل اینکه این اکتویتی اصلا اجرا نمیشه ،اما چطوری اجراش کنم ، اخه این اکتویتی لی آوت نداره ، اگه بار اول این اکتویتی اجرا بشه  کاربر چی می بینه ؟!
راهی هست که به محض اجرا  شدن این اکتویتی ، بسته بشه و اکتویتی شروع  پروژه  بیاد ، به این خاطر مطئمن هستم که اون اکتویتی اجرا نمیشه با این کد
جواب گرفتم (داخل یک اکتویتی هست ؟)



package com.example.myapp6;

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;

public class MyActivity extends Activity {
   /**
    * Called when the activity is first created.
    */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       SharedPreferences settings = getSharedPreferences("mysettings",
               Context.MODE_PRIVATE);

       String myString = settings.getString("mystring", "0");
       int i=Integer.parseInt(myString)+1;


       SharedPreferences.Editor editor = settings.edit();
       editor.putString("mystring", Integer.toString(i));
       editor.commit();
       TextView t = (TextView) findViewById(R.id.textView1);
       t.setText(Integer.toString(i));
      // finish();

   }

}





پاسخ
تشکر شده توسط:
#8
ممنون بابت کمک ها ، حل شد ، میخوام بیش از 4000 متغیر رو داخل اینا ذخیره کنم d:


package com.example.myapp6;
import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.content.SharedPreferences;
import android.widget.TextView;
import android.content.Context;
import android.content.Intent;
/**
 * Created by bita on 9/22/2015.
 */

public class Prefs extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SharedPreferences settings = getSharedPreferences("mysettings",
                Context.MODE_PRIVATE);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("name","ali" );
        editor.commit();
        finish();
        Intent inent = new Intent(this,MyActivity.class);
        startActivity(inent);


    }

}




پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان