7

これが私のアプリの現在の簡単な説明です。標準の HTTP セッションを使用するリモート サーバー API を使用します。ログイン アクティビティ。auth クラスを呼び出し、ログインとパスワードを渡します。

public class Auth extends AsyncTask{
...
private DefaultHttpClient client = new DefaultHttpClient();
private HttpContext localContext = new BasicHttpContext();
private CookieStore cookieStore = new BasicCookieStore();
...
public void auth(String login, String password) {
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    HttpPost request = new HttpPost(url);
    ...
}
protected void onPostExecute(Boolean result){
    parent.loginresponse(result)
}

認証が成功すると、リモート サーバーは標準の HTTP セッションを作成し、Cookie を送信して CookieStore に保存します。ログイン後、loginresponse がメイン アクティビティを開始します。そこで、すべての API リクエストに対して 1 つのユニバーサル クラスを用意したいと考えています。

ログイン後、すべてのアクティビティ間で作成された HTTP セッション情報を正しく維持し、対応する API メソッドに必要な関数に渡すにはどうすればよいですか?

4

3 に答える 3

1

Daggerのような DI フレームワークを使用すると、アクティビティ間を維持して、HttpContext好きな場所に挿入できます。

于 2014-11-28T12:05:30.660 に答える
0

次のようなことができます。

HttpClient client = getNewHttpClient();
        // Create a local instance of cookie store
        CookieStore cookieStore = new BasicCookieStore();

        // Create local HTTP context
        HttpContext localContext = new BasicHttpContext();
        // Bind custom cookie store to the local context
        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        try {
            request = new HttpPost(url);
            // request.addHeader("Accept-Encoding", "gzip");
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (postParameters != null && postParameters.isEmpty() == false) {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    postParameters.size());
            String k, v;
            Iterator<String> itKeys = postParameters.keySet().iterator();
            while (itKeys.hasNext()) {
                k = itKeys.next();
                v = postParameters.get(k);
                nameValuePairs.add(new BasicNameValuePair(k, v));
            }

            UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(
                    nameValuePairs);
            request.setEntity(urlEntity);

        }
        try {

            Response = client.execute(request, localContext);
            HttpEntity entity = Response.getEntity();
            int statusCode = Response.getStatusLine().getStatusCode();
            Log.i(TAG, "" + statusCode);

            Log.i(TAG, "------------------------------------------------");

            if (entity != null) {
                Log.i(TAG,
                        "Response content length:" + entity.getContentLength());

            }
            List<Cookie> cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                Log.i(TAG, "Local cookie: " + cookies.get(i));

            }

            try {
                InputStream in = (InputStream) entity.getContent();
                // Header contentEncoding =
                // Response.getFirstHeader("Content-Encoding");
                /*
                 * if (contentEncoding != null &&
                 * contentEncoding.getValue().equalsIgnoreCase("gzip")) { in =
                 * new GZIPInputStream(in); }
                 */
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(in));
                StringBuilder str = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {

                    Log.i(TAG, "" + str.append(line + "\n"));
                }
                in.close();
                response = str.toString();
                Log.i(TAG, "response" + response);
            } catch (IllegalStateException exc) {

                exc.printStackTrace();
            }

        } catch (Exception e) {

            Log.e("log_tag", "Error in http connection " + response);

        } finally {
            // When HttpClient instance is no longer needed,
            // shut down the connection manager to ensure
            // immediate deallocation of all system resources
            // client.getConnectionManager().shutdown();
        }

        return response;
    enter code here
于 2012-05-24T13:19:38.087 に答える