how to set the value of sharedPreferences in other

2019-08-30 10:16发布

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

2条回答
时光不老,我们不散
2楼-- · 2019-08-30 11:03

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();
查看更多
叼着烟拽天下
3楼-- · 2019-08-30 11:05

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();
....
}
查看更多
登录 后发表回答