AsyncTask
이 서버에 사용자 이름과 암호를 게시하기 위해 AsyncTask
을 호출하고 응답시 사용자 이름이 SharedPreferences
(여기서 SP에서 사용자 이름을 검색 할 수 있음)을 작성하고 반환합니다. ~ may 앱의 MainActivity
. 그러나 SP에서 MainActivity
으로 사용자 이름을 검색하면 null
입니다. 나는 어디에서 잘못 했는가?SharedPreferences AsyncTask에서 편집기에 의해 getString이 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!
}
매니페스트 권한 : getPreferences (INT 모드) :
<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이 null이 아닌 corrent 값을 반환하는지 확인할 수 있습니까? – Marius
네, 맞습니다. 또한, 편집자가 SharedPreferences를 작성한 직후에 즉시 얻었고 정확합니다 (Log.d 코드 참조). – mrmoment
SharedPreference 이름은 어디에 있습니까? – Aniruddha