how to set the value of sharedPreferences in other activity?

天涯浪子 提交于 2019-12-13 21:42:46

问题


I have two activities in my app. First activity SplashScreen and other SplashActivity. I have sharedPreferences in SplashScreen but i want to set value of this true in SplashActivity. I think If it is possible to create a method in SplashActivity which run only once i.e this method compare the boolean value of SplashScreen (like this is false at start). After first run its set to true forever and this method is skipped. I've tried a lot to do this but not successful.

SplashScreen-

public class SplashScreen extends Activity 
{
    /** Called when the activity is first created. */
    TimerTask task;
    SharedPreferences pref;
    SharedPreferences.Editor ed;

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.splash_screen);
       pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
       Log.v("","onCreate is calling");
       if(pref.getBoolean("activity_executed", false))
       {
            Log.v("","Before if called");
            setContentView(R.layout.splash_screen);
            Log.v("","after if called");
            new Handler().postDelayed(csRunnable1, 5000);
       } 
       else 
       {
          new Handler().postDelayed(csRunnable2, 5000);  
       }
   }

   Runnable csRunnable1=new Runnable() 
   {       
       @Override
       public void run() 
       {
            Intent intent = new Intent(SplashScreen.this, SplashActivity.class);
               startActivity(intent);
               finish();

       }
   };

   Runnable csRunnable2=new Runnable() 
    {      
       @Override
       public void run() 
       {
            Intent intent = new Intent(SplashScreen.this, LoginActivity.class);
               startActivity(intent);
               finish();

       }
   };
}

SplashActivity-

public class SplashActivity extends Activity implements OnClickListener
{   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome);
        //////////////////////////////////////////////////////////////////////
        //////// GAME MENU  /////////////////////////////////////////////////
        Button playBtn = (Button) findViewById(R.id.playBtn);
        playBtn.setOnClickListener(this);
        Button settingsBtn = (Button) findViewById(R.id.settingsBtn);
        settingsBtn.setOnClickListener(this);
        Button rulesBtn = (Button) findViewById(R.id.rulesBtn);
        rulesBtn.setOnClickListener(this);
        Button exitBtn = (Button) findViewById(R.id.exitBtn);
        exitBtn.setOnClickListener(this);
    }


    /**
     * Listener for game menu
     */
    @Override
    public void onClick(View v) {
        Intent i;

        switch (v.getId()){
        case R.id.playBtn :
            //once logged in, load the main page
            //Log.d("LOGIN", "User has started the game");
            //Get Question set //
            List<Question> questions = getQuestionSetFromDb();
            //Initialise Game with retrieved question set ///
            GamePlay c = new GamePlay();
            c.setQuestions(questions);
            c.setNumRounds(getNumQuestions());
            ((CYKApplication)getApplication()).setCurrentGame(c);  
            //Start Game Now.. //
            i = new Intent(this, QuestionActivity.class);
            startActivityForResult(i, Constants.PLAYBUTTON);
            finish();
            break;

        case R.id.rulesBtn :
            i = new Intent(this, RulesActivity.class);
            startActivityForResult(i, Constants.RULESBUTTON);
            finish();
            break;

        case R.id.settingsBtn :
            i = new Intent(this, SettingsActivity.class);
            startActivityForResult(i, Constants.SETTINGSBUTTON);
            finish();
            break;

        case R.id.exitBtn :
            finish();
            break;
        }

    }

I know this is the line i need to edit in SplashActivity but whenever i add this my app crash.

ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();

回答1:


May be you are doing something wrong. you can do simply this in splash screen

   if(pref.getBoolean("activity_executed", false))
   {
        Log.v("","Before if called");
        setContentView(R.layout.splash_screen);
        Log.v("","after if called");
        new Handler().postDelayed(csRunnable1, 5000);
        pref.edit().putBoolean("activity_executed", true).commit();
   } 

or in your splashactivity oncreate call this

getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE).edit().putBoolean("activity_executed", true).commit();



回答2:


Also call this in your SplashActivity

onCreate(...){
....
SharedPreferences pref;
SharedPreferences.Editor ed;
pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
....
}


来源:https://stackoverflow.com/questions/19227846/how-to-set-the-value-of-sharedpreferences-in-other-activity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!