2016-11-14 44 views
1

我正在使用以下代碼來保存共享首選項。getSharedPrefernces僅在另一個作業中正常返回null活動

sharedpreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedpreferences.edit(); 
editor.clear(); 
editor.putString("NIC",nic); 
editor.putString("fName",fName); 
editor.putString("mName",mName); 
editor.putString("lName",lName); 
editor.putString("aNo",aNo); 
editor.putString("lane",aLane); 
editor.putString("city",aCity); 
editor.putString("contactNo",contactNo); 
editor.putString("regDate",regDate); 
editor.putString("cardNo",cardNo); 
editor.putString("balance",balance); 
editor.commit(); 

使用以下代碼獲取配置文件活動中的共享首選項,並且它工作正常。

private void getPrefs() { 
     SharedPreferences userDetails = Profile.this.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); 
     id = userDetails.getString("NIC", ""); 
     f_Name = userDetails.getString("fName", ""); 
     m_Name = userDetails.getString("mName", ""); 
     l_Name = userDetails.getString("lName", ""); 
     contact_no = userDetails.getString("contactNo", ""); 
     a_No = userDetails.getString("aNo", ""); 
     a_Lane = userDetails.getString("lane", ""); 
     a_City = userDetails.getString("city", ""); 
     card_No = userDetails.getString("cardNo", ""); 
     reg_Date = userDetails.getString("regDate", ""); 
    } 

但是,當我在另一個活動中使用相同的,它爲id返回null。

private void getPrefs() { 
     SharedPreferences userDetails = Travel.this.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); 
     id = userDetails.getString("NIC", ""); 
} 

mainfest.xml

<activity 
      android:name=".Profile" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="com.example.pavsaranga.scat.PROFILE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".Travel" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="com.example.pavsaranga.scat.TRAVEL" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

任何人都可以請幫我解決這個問題呢?旅遊活動

public class Travel extends AppCompatActivity { 

    TableLayout tl; 
    StringBuilder sb; 
    String id, result; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.travel); 
     tl = (TableLayout)findViewById(R.id.tlTravel); 
     getPrefs(); 
     Thread t1 = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       getResponse(); 
      } 
     }); 
     t1.start(); 
    } 

    private void getPrefs() { 
     SharedPreferences userDetails = getApplicationContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); 
     id = userDetails.getString("NIC", ""); 
    }} 
+0

它不應該返回null。您已將回退字符串設置爲空字符串。也許你實際上保存了字符串'「null」'? –

+0

不使用配置文件活動我可以查看設置的共享首選項 –

+0

就像我說的,但沒有理由該字符串爲空。顯示完整的活動代碼,請 –

回答

0

改變這種或Profile.this來getApplicationContext()

像 的完整代碼:

 SharedPreferences userDetails = getApplicationContext() 
.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); 
+1

仍然只爲Travel活動返回null。對於配置文件活動它工作正常,我也可以查看設置共享首選項。 –

+0

我在問題 –

+0

上添加了活動的完整代碼也許您已經使用.Profile上下文創建了Prefs? 所有的首選項都應該在相同的上下文中進行讀寫(就像@Ahmad建議的那樣)。 您應該更改.Profile活動中的代碼,以便在應用程序上下文中編寫首選項,而不是在.Profile.this中。 – Grisgram

相關問題