簡體   English   中英

如何在沒有活動ANDROID的情況下從另一個類中檢索共享的首選項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM