我有一个LoginActivity
,它调用AsyncTask
来向服务器发送用户名和密码,并在响应时将它写入用户名SharedPreferences
(可以从此处检索用户名)并返回到可能的应用程序MainActivity
。但是,我从MainActivity
的SP中检索用户名,它是null
。我在哪里做错了?SharedPreferences getString在AsyncTask中由编辑器设置返回null
的AsyncTask代码:
//activity is the context passed from LoginActivity (using "this")
protected void onPostExecute(String result) {
if(result!=null){
try {
JSONTokener jsonParser = new JSONTokener(result);
JSONObject msg = (JSONObject) jsonParser.nextValue();
String data=msg.getString("data");
int code=Integer.parseInt(msg.getString("code"));
if(code==0){
//Write to local storage
SharedPreferences settings = activity.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
JSONTokener dataParser = new JSONTokener(data);
JSONObject dataJSON=(JSONObject) dataParser.nextValue();
editor.putString("acc_username", dataJSON.getString("username"));
if(dataJSON.getString("token")!=null){
editor.putString("acc_token", dataJSON.getString("token"));
}
editor.commit();
//Log.d("TEST",activity.getPreferences(Context.MODE_PRIVATE).getString("acc_username", null));//I can get the username here -- means the post and login request and response are correct.
Intent intent=new Intent(activity, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
MainActivity代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//read login info from device
SharedPreferences settings = getPreferences(MODE_PRIVATE);
String accUsername = settings.getString("acc_username", null);
Log.d("TEST","accUsername="+accUsername);//it is null!
}
清单权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
你能否确认dataJson返回的是corrent值,而不是null? – Marius 2014-09-22 07:17:44
是的,它是正确的。另外,在编写SharedPreferences的编辑器之后,我立即得到它,并且它是正确的(请参阅Log.d代码)。 – mrmoment 2014-09-22 07:19:51
SharedPreference名称在哪里? – Aniruddha 2014-09-22 07:22:46