[英]how to retrive shared preferences from another class without activity ANDROID
package com.example.win7.simpleloginapp;
public class ServerRequest {
ProgressDialog progressDialog;
public static final int CONNECTION_TIMEOUT = 1000 * 15;
public static final String SERVER_ADDRESS = "ekinidris.site40.net";
final static String TAG_USER = "user";
JSONArray user;
JSONParser jsonParser = new JSONParser();
// Create object of SharedPreferences.
SharedPreferences sharedPref1 = PreferenceManager.getDefaultSharedPreferences(this);
public ServerRequest(Context context) {
progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setTitle("Processing..");
progressDialog.setMessage("Please Wait....");
}
public void storeUserDataInBackground(user user, GetUserCallback userCallback) {
progressDialog.show();
new StoreUserDataAsyncTask(user, userCallback).execute();
}
public void fetchUserDataInBackground(user user, GetUserCallback callBack) {
progressDialog.show();
new fetchUserDataAsyncTask(user, callBack).execute();
}
public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, user> {
user user;
GetUserCallback userCallback;
public fetchUserDataAsyncTask(user user, GetUserCallback userCallback) {
this.user = user;
this.userCallback = userCallback;
}
@Override
protected user doInBackground(Void... params) {
ArrayList<NameValuePair> dataToSend = new ArrayList<>();
dataToSend.add(new BasicNameValuePair("username", user.username));
dataToSend.add(new BasicNameValuePair("password", user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost("http://mysyshcms.cloudapp.net:1005/fetchUserData.php");
user returnedUser = null;
try {
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity);
JSONObject jObject = new JSONObject(result);
if(jObject.length()==0)
{
returnedUser = null;
}
else
{
String Name1 = jObject.getString("Name");
//now get Editor
SharedPreferences.Editor editor = sharedPref1.edit();
//put your value
editor.putString("username", Name1);
//commits your edits
editor.commit();
returnedUser = new user(user.username, user.password);
}
} catch (Exception e) {
e.printStackTrace();
}
return returnedUser;
}
@Override
protected void onPostExecute(user returnedUser) {
progressDialog.dismiss();
userCallback.done(returnedUser);
super.onPostExecute(returnedUser);
}
}
}
我有ServerRequest
類,這不是activity
。 在公共類fetchUserDataAsyncTask
我想共享一個首選項。 這是因為我想將我從數據庫獲得的數據傳遞給另一個活動( MainActivity
)
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#689a92")));
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
setContentView(R.layout.activity_main);
SharedPreferences sharedPref1 = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref1.getString("username", "NOT AVAILABLE");
etUsername.setText(userName);
但是我一直在獲取“ NOT AVAILABLE”,而不是我在服務器request中聲明的Name1。 如何解決呢?
PreferenceManager.getDefaultSharedPreferences(this)用於首選項框架使用的默認SharedPreferences文件。
如果要在應用程序內保存SharedPreferences,則需要使用SharedPreferences界面。 要使用它,您需要活動的上下文。
以下代碼段顯示了如何將數據保存到SharedPreferences:
SharedPreferences sharedPreferences = context.getSharedPreferecnes("Shared_PREF_NAME, Contextt.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("key", 100);
editor.commit();
要檢索使用此:
sharedPreferences.getInt("key", 0);
有關更多信息,請訪問以下鏈接:
http://developer.android.com/reference/android/content/SharedPreferences.html
http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
您可以將數據首選項直接保存在fetchUserDataAsyncTask類的onPostExecute方法中,然后可以進行訪問,如下所示。
SharedPreferences sharedPref1 = PreferenceManager.getDefaultSharedPreferences(this);
sharedPref1.edit().putString("username",""+username).commit();
如果要在當前類中實現SharedPreferences。 您必須首先通過相關的活動上下文。
嘗試這個 :
public class ServerRequest {
private Context mContext;
public ServerRequest(Context context) {
mContext = context;
}
public SharedPreferences getSharedPref(){
return mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
}
public void storeData(String data) {
getSharedPref().edit().putString("data", data).apply();
}
public String getData(){
return getSharedPref().getString("data", "");
}
}
現在,在任何課程上。 您可以通過調用回讀數據
ServerRequest serverRequest = new ServerRequest(getActivity());
Log.d("","The value is : " + serverRequest.getData());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.