gpt4 book ai didi

android - HttpURLConnection 似乎没有在 Android 上使用缓存

转载 作者:行者123 更新时间:2023-11-30 04:11:56 25 4
gpt4 key购买 nike

我最近将我的应用程序从使用 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) {
}
}

同样在我的应用程序类中我有

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 手机,也不会发生缓存命中,而且缓存似乎根本没有做任何事情。如果我做错了什么,或者遗漏了什么,你能告诉我吗?

最佳答案

http://pastebin.com/i60a90wv

上述链接中的“更新”方法是使用 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);
}

关于android - HttpURLConnection 似乎没有在 Android 上使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com