2014-07-13 64 views
0
串共享偏好

我想設置偏好的字符串值:在Android電子

//onCreate 
    if(name==null){ 
       setprefer(); 
      } 
      else{ 
       getpref(); 
      } 

    private void setprefer() { 
      et1 = (EditText) findViewById(R.id.editText1); 
      b1 = (Button) findViewById(R.id.button1); 
      b1.setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
        s = et1.getText().toString(); 
        if(s.matches("")) 
        { 
         //wait!! 
         Toast.makeText(Home.this, "Enter your name", Toast.LENGTH_SHORT).show(); 
        } 
        else{ 
         setpref(s); 
         Intent i = new Intent(Home.this, Homescreen.class); 
         i.putExtra("name", s); 
         startActivity(i); 
         Home.this.finish(); 
        } 
       } 
      }); 
     } 

     private void setpref(String name) { 
      SharedPreferences pref = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE); 
      Editor editor = pref.edit(); 
      editor.putString("key", name); 
      editor.commit();   
     } 
     private void getpref() { 
      SharedPreferences prefs = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE); 
      s = prefs.getString("key", name); 
      Intent i = new Intent(Home.this, Homescreen.class); 
      i.putExtra("name", name); 
      startActivity(i); 
      Home.this.finish(); 
     } 

我設置與方法setprefer(偏好),但每次我開始我的活動的要求FR我已經存儲在我的首選項中的名稱。 不知何故,我無法在上面的代碼中獲得我保存的預先考慮。 請提出修復建議。

+0

從共享pref中提取文件並且你也可以看到這些值 – KOTIOS

+0

我不確定是否有足夠的上下文(特別是'onCreate'的實際完整代碼)來確定問題。 – Dallas

+0

沒有更多的onCreate。我只是按照指定的函數調用幾個函數。 – Shubhankar

回答

1

這取決於當你做這個有什麼name有:

if(name==null){ 
    setprefer(); 
} 
else{ 
    getpref(); 
} 

但是因爲檢查你是不是name變量指定的任何值之前,它是空,因此setPrefer()被稱爲每次。您需要從SharedPrefs中獲取值,並在檢查name == null之前將其分配到name

0

共享首選項有一個名爲contains()的方法。請檢查共享首選項是否已存在。如果首選項存在,該方法將返回true。

+1

如果你這樣做了,而且它是空的,它會崩潰,並帶有NullPointerException。所以不要這樣做。另外,'比賽'不是很好。在這兩種情況下,都使用TextUtils.isEmpty(val),它同時處理空字符串和空字符串。 –