2013-05-20 3 views
4

Android 개발을 처음 사용합니다. 위에 언급 된 라이브러리를 만드는 최선의 방법이 무엇인가에 대한 몇 가지 질문이 최적으로 작용했습니다.Android 비동기 HTTP 클라이언트 (loopj) 및 영구 쿠키 저장소

현재 내 앱에는 세 가지 활동이 있습니다. MainActivity, LoginActivity 및 HomeActivity입니다. 앱이 로그인되어 있는지 확인하는 MainActivity를 시작합니다. 로그인 한 사용자는 집으로 리디렉션하고 그렇지 않으면 로그인으로 리디렉션합니다.

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. 이 새로운 쿠키의 저장을 요청이 가 될 때마다를 만들 것입니다. 한 번만 만들어 지도록 어디서 붙여야합니까? MainActivity의 onCreate에 넣은 다음 전역 변수에 할당 하시겠습니까? 그게 최선의 관행입니까?
  2. 내 MainActivity에서 서버에서 보낸 인 세션 쿠키를 어떻게 확인할 수 있습니까? 공유 환경 설정에 있다는 것을 알고 있지만, 어떻게하면 을 얻을 수 있습니까? 설명서는 어떤 변수가 SharedPreferences에 저장되는지 이 될 것이라고 말하지 않습니다.
  3. 누군가를 로그 아웃해야 할 경우 공유 환경 설정을 삭제하거나 쿠키 저장소를 지우거나 둘 다 지우시겠습니까? 자동으로 동기화됩니까?
  4. 앱이 다시 시작되면 sharedpreferences의 저장된 데이터에서 쿠키 저장소를 초기화하는 방법은 무엇입니까?
  5. 제대로 구현 한 오픈 소스 코드를 알고 있다면 기꺼이 그것을보고이 질문에 답해보십시오. 그냥 링크를 제공하십시오!

나는 여기서 나의 이해 수준이 정말로 낮다는 것을 알기 때문에 나와 벗겨주세요. :)

답변

5

그래서 지금까지 내가 한 것입니다. 그것은 작동하지만, 모범 사례인지 확실하지 않습니다.

1) 쿠키 저장소는 sharedpreference에서 초기화됩니다. 그래서 당신이 필요할 때마다 새로운 것을 만드십시오. 매번 동일한 문맥을 사용해야합니다. 나는 사용하고있다 getApplicationContext()

2) 및 4) 쿠키 저장은 모두 당신을 위해 그것을 handels. 이전에 생성 한 컨텍스트와 동일한 컨텍스트로 새 컨텍스트를 만듭니다. 일관성이있는 한 쿠키가 제대로 초기화됩니다.

3) 쿠키 저장소는 공유 환경 설정 및 동기화 로컬 속성이 그래서 그냥 (new PersistentCookieStore(getApplicationContext())).clear();

내 코드

RestClient.java

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

LoginActivity 전화를 유지합니다.자바

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

관련 문제