تالار گفتمان nCIS.ir

نسخه‌ی کامل: فراخوانی مقدار SharedPreferences (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
من یک فایل به اسم 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");


اشکال کد کجاست ؟
اون مقدار 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 واسه کد نوشتن استفاده نکردم و حفظی نوشتم دستوراتو ممکنه مشکل سینتکسی باشه شما تست کنین اگه مشکلی داشت بگین تا درستش کنم یا توضیحی خواستین بگم
اینو تست کنید:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
(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);
   }
}



(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);






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

کد:
public class Prefs extends PreferenceActivity

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

کد:
public class Prefs extends Activity

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



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();

   }

}





ممنون بابت کمک ها ، حل شد ، میخوام بیش از 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);


    }

}