Câu hỏi Làm cách nào để ngăn Android trả lại phản hồi được lưu trong bộ nhớ cache cho Yêu cầu HTTP của tôi?


Tôi đang viết một khách hàng đang thực hiện các yêu cầu http lặp lại cho dữ liệu xml đang thay đổi theo thời gian. Có vẻ như ngăn xếp Android đang lưu vào bộ nhớ cache các yêu cầu trang của tôi và trả lại cùng một trang. Làm cách nào để đảm bảo trang đó nhận được một trang mới mỗi lần?

- mã ---

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response;
    response = client.execute(request);

InputStream in;
in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

Cảm ơn, Gerry


27
2018-04-22 16:53


gốc




Các câu trả lời:


thêm tiêu đề HTTP:

Cache-Control: no-cache

và xem có hiệu quả không.


25
2018-04-22 17:26



Sử dụng không có bộ nhớ cache và không lưu trữ dường như không ảnh hưởng đến kết quả. Thêm một tham số không có thật mà thay đổi dường như không hoạt động. Tôi đang sử dụng: HttpClient client = new DefaultHttpClient (); HttpGet request = new HttpGet (url); Phản hồi của HttpResponse; thử {request.setHeader ("Cache-Control", "no-cache"); request.setHeader ("Cache-Control", "no-store"); response = client.execute (yêu cầu); Bất cứ ai khác đã có bất kỳ thành công với điều này? Nếu không, nền tảng là vô dụng đối với tôi. - Gerry
Bạn đã thêm cả hai tiêu đề chưa? Hoặc chỉ một lần tại một thời điểm? - Kylar
Cả hai tiêu đề cùng một lúc. - Gerry
OK, tôi thấy vấn đề. Trước tiên, bạn không nên thêm cùng một tiêu đề hai lần, bạn nên thêm nó một lần với cả hai giá trị và thứ hai, bạn nên thêm nó vào đối tượng phản hồi - Điều đó nghĩa là Server cần thêm tiêu đề đó. - Kylar
Vì vậy, giải pháp là quá thay đổi mã máy chủ đáp ứng yêu cầu của tôi. Điều này thú vị, bởi vì điều này là không cần thiết trên blackberry hoặc iphone. Tôi cho rằng google có thể xử lý các yêu cầu đến cùng một url một trong 2 cách và họ chọn đối diện của các công ty os điện thoại khác. - Gerry


Nối một tham số không được sử dụng vào cuối URL:

HttpGet request = new HttpGet(url + "?unused=" + someRandomString());

Ở đâu someRandomString() có thể liên quan đến thời gian hiện tại.

Đó là thô, nhưng nó khá nhiều đảm bảo để làm việc bất kể tất cả các yếu tố bên ngoài mà có thể làm cho một "đúng" giải pháp không thành công, giống như misconfigured hoặc buggy proxy.


26
2018-04-22 16:57



Điều đó đã làm các trick cho tôi, nhưng có bất kỳ tiêu đề ở phía khách hàng để thêm vào để phá vỡ vấn đề? - kaneda


Gợi ý: để lấy chuỗi ngẫu nhiên

HttpGet request = new HttpGet(url + "?unused=" + UUID.randomUUID().toString());

2
2017-08-21 09:29