2013-05-20 108 views
4

我是Android開發新手。關於如何使上述庫最佳工作的最佳方式,有幾個問題。Android異步Http客戶端(loopj)和持久Cookie存儲

目前,我在我的應用程序中有三個活動。 MainActivity,LoginActivity和HomeActivity。該應用程序啓動MainActivity,該應用程序檢查該用戶是否已登錄。如果該用戶已登錄,則重定向至Home,否則重定向至登錄。

正如documentation所述,我創建了一個RestClient類。我可以在我的LoginActivity中成功發出請求並獲得響應。這是我的登錄代碼。

public void login() { 
     RequestParams params = new RequestParams(); 
     params.put(AUTH_PARAMETER_EMAIL, mEmail); 
     params.put(AUTH_PARAMETER_PASSWORD, mPassword); 

     RestClient.setCookieStore(new PersistentCookieStore(this)); 
     RestClient.post(AUTH_URL, params, new JsonHttpResponseHandler() { 
      @Override 
      public void onFinish() { 
       showProgress(false); 
      } 

      @Override 
      public void onSuccess(JSONObject response) { 
       String response_status = null; 
       try { 
        response_status = response.getString(AUTH_RESPONSE_STATUS); 
       } catch (JSONException e) { 
        Toast.makeText(LoginActivity.this, 
          "ERROR: " + e.toString(), Toast.LENGTH_LONG).show(); 
        Log.e(TAG, e.toString()); 
       } 
       if (response_status.equals(AUTH_SUCCESS_STATUS)) { 
        finish(); 
       } else { 
        mPasswordView 
          .setError(getString(R.string.error_incorrect_password)); 
        mPasswordView.requestFocus(); 
       } 
      } 

      @Override 
      public void onFailure(Throwable e, String content) { 
       Toast.makeText(LoginActivity.this, "ERROR: " + e.toString(), 
         Toast.LENGTH_LONG).show(); 
       Log.e(TAG, e.toString()); 
      } 

     }); 
    } 

問題

  1. 這將創建一個新的cookie存儲的請求 每次做出。我應該把它放在什麼位置才能創建一次?應該 我把它放在MainActivity的onCreate,然後將它分配給一個 全局變量?這是最佳做法嗎?
  2. 在我的MainActivity中,如何檢查從服務器發送的會話cookie是 ?我知道這是在共享首選項,但我怎麼能得到它?該文檔沒有說明將存儲在SharedPreferences中的變量將會是哪個變量 。
  3. 當我需要註銷某人時,我是否刪除了共享首選項或刪除了Cookie存儲或兩者?它們是否自動保持同步?
  4. 當應用程序重新啓動時,如何從sharedpreferences中保存的數據初始化cookie存儲?
  5. 如果您知道任何開源代碼能正確實現這一點,我很高興看到它並自己回答這些問題。只需提供一個鏈接!

我意識到我在這裏的理解水平真的很低所以請和我一起袒護! :)

回答

5

所以這是我迄今爲止所做的。它有效,但我不確定這是否是最佳實踐。

1)Cookie存儲從sharedpreference中初始化。所以每次需要時都要創建一個新的。請務必每次使用相同的上下文。我正在使用getApplicationContext()

2)和4)Cookie存儲爲您提供一切。只需創建一個與之前創建的環境相同的新環境。只要你保持一致,cookies就會正確初始化。

3)cookie存儲保持共享偏好,並同步其本地屬性,所以才稱之爲(new PersistentCookieStore(getApplicationContext())).clear();

我的代碼

RestClient.java

public static void setCookieStore(PersistentCookieStore cookieStore) { 
    client.setCookieStore(cookieStore); 
} 

LoginActivity。java的

RestClient.setCookieStore(new PersistentCookieStore(getApplicationContext())); 

MainActivity.java

private void loginRouter() { 
    PersistentCookieStore mCookieStore = new PersistentCookieStore(
      getApplicationContext()); 
    List<Cookie> cookies = mCookieStore.getCookies(); 
    for (Cookie c : cookies) { 
     if (c.getName().equals("session")) { 
      startActivity(new Intent(this, HomeActivity.class)); 
      finish(); 
     } 
    } 
    launchSplashPage(); 
} 
+0

嘿,你在這裏提到的非常有趣的事情。我在哪裏可以註銷'.clear'? – Phil