1

最近、アプリを AndroidHTTPClient の使用から HttpURLConnection の使用に切り替えました。HttpURLConnection のキャッシュ機能を機能させようとしていますが、成功していません。

Httpリクエストを実行するための私のコードは次のとおりです

    URL url = new URL(currentURL);

    ResultAndUrl result = null;
    final HttpURLConnection httpUrlConnection = (HttpURLConnection) urll.openConnection();
    httpUrlConnection.setUseCaches(true);
    try {
        InputStream in = new BufferedInputStream(httpUrlConnection.getInputStream());
        result = new ResultAndUrl();
        result.result = convertStreamToString(in);
        result.url = currentURL;
    } catch (final Exception e) {
        try {
            Log.e("NETWORK", e.getMessage());
        } catch (Exception ee) {

        }
    } finally {
        try {
            httpUrlConnection.disconnect();
        } catch (Exception e) {
        }
    }

また、私のApplicationクラスには

public void enableHttpResponseCache() {
    final long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
    final File httpCacheDir = new File(getCacheDir(), "http");
    try {
        Class.forName("android.net.http.HttpResponseCache")
            .getMethod("install", File.class, long.class)
            .invoke(null, httpCacheDir, httpCacheSize);
    } catch (Exception httpResponseCacheNotAvailable) {
        try{
            HttpResponseCache.install(httpCacheDir, httpCacheSize); // Library that implements HttpResponseCache for pre-ICS phones
        } catch(Exception e){
        }
    }
}

ただし、ICS 電話の場合でも、キャッシュ ヒットは発生しておらず、キャッシュがまったく機能していないように見えます。私が何か間違ったことをしているのか、何かが欠けているのか教えてください。

4

1 に答える 1

1

http://pastebin.com/i60a90wv

上記のリンクの「update」メソッドは、http スレッド プール、https、および http ポストを使用したサンプル コードです。したがって、上記のコメントでリンクを提案することに加えて、Android でもそれらを使用しました。

いくつかのコード (HttpConnectionPost クラスからの実行可能ファイル:

    public void run() {
//      Log.d(TAG, "run ENTRY instance"  +entry.toString());
        handler.sendMessage(Message.obtain(handler, HttpConnection.DID_START));
        HttpParams params = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(params, 40 * 1000);
        HttpConnectionParams.setSoTimeout(params, 20 * 1000);
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

        httpClient = new DefaultHttpClient(MyConnectionManager.getInstance(), params);
//      HttpConnectionParams.setSoTimeout(httpClient.getParams(), 25000);
        httpClient.addRequestInterceptor(new HttpRequestInterceptor() {
            public void process(
                    final HttpRequest request, 
                    final HttpContext context) throws HttpException, IOException {
                if (!request.containsHeader("Authorization")) {
                    request.addHeader("Authorization", "OAuth " +ClientCustomSSL.getInstance().getToken());
                }
            }

        }); 
        try {
            HttpResponse response = null;
            switch (method) {

            case POST:
                HttpPost httpPost = new HttpPost(url);
                if (data != null){
                    System.out.println(" post data not null ");
                    httpPost.setEntity(new StringEntity(data));
                }
                if (entry != null){
                    ContentProducer cp = new ContentProducer() {
                        public void writeTo(OutputStream outstream) throws IOException {

                             ExtensionProfile ep = new ExtensionProfile();
                             ep.addDeclarations(entry);
                             XmlWriter xmlWriter = new XmlWriter(new OutputStreamWriter(outstream, "UTF-8"));
                             entry.generate(xmlWriter, ep);
                             xmlWriter.flush();
                        }
                    };
                    httpPost.setEntity(new EntityTemplate(cp));
                }
                httpPost.addHeader("GData-Version", "2");
                httpPost.addHeader("X-HTTP-Method-Override", "PATCH");
                httpPost.addHeader("If-Match", "*");
                httpPost.addHeader("Content-Type", "application/xml");
                response = httpClient.execute(httpPost);

                break;
            }
            if (method < BITMAP)
                processEntity(response.getEntity());
        } catch (Exception e) {
            handler.sendMessage(Message.obtain(handler,
                    HttpConnection.DID_ERROR, e));
        }
        MyConnectionManager.getInstance().didComplete(this);
    }
于 2012-05-27T16:04:46.333 に答える