[英]Ion Koush Library - Response is not cacheable
I'm trying to get some jsons from my backend API using Ion Koush Library. 我正在尝试使用Ion Koush库从后端API中获取一些json。 I could do it with sucess in one of the API routes, but at the other I'm having the following answer : Response is not cacheable.
我可以在其中一个API路由中成功完成此操作,但在另一个API路由中,我得到以下回答:响应不可缓存。 For a better understanding of the problem here is the code:
为了更好地理解问题,以下是代码:
Ion.with(clientSummaryActivity.this)
.load("GET",url)
.setLogging("LOG",Log.VERBOSE)
.addQuery("format","json")
.setHeader("Authorization",getIntent().getExtras().getString("token"))
.asJsonArray()
.setCallback(new FutureCallback<JsonArray>() {
@Override
public void onCompleted(Exception e, JsonArray result) {
// do stuff with the result or error
if(e != null){
Toast.makeText(clientSummaryActivity.this, "Erro na Query: " + e, Toast.LENGTH_LONG).show(); //cria balao de texto na view indicada
Log.v("Query Error2: ",""+e);
return;
}
if(result == null)
Log.v("Error: ","resultado vazio");
else
Log.v("Teste: ",""+result);
return;
}
});
}
And here is the debug log: 这是调试日志:
> D/LOG: (0 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: preparing request
>D/LOG: (0 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: preparing request
>I/LOG: (0 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Using loader: com.koushikdutta.ion.loader.HttpLoader@18cbec99
>D/LOG: (0 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Executing request.
>V/LOG: (4 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Resolving domain and connecting to all available addresses
>V/LOG: (10 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: attempting connection to /10.0.2.2:8080
>V/LOG: (14 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: socket connected
>V/LOG: (14 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json:
GET /api/comentario/cliente/00013436415782/?format=json HTTP/1.1
Host: 10.0.2.2:8080
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; Android SDK built for x86_64 Build/LMY48X)
Accept-Encoding: gzip, deflate
Connection: keep-alive
Accept: */*
Cache-Control: no-cache
Authorization: Token a3e8b50ae73aabad0605433f704eb628269f68c8
>V/LOG: (16 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: request completed
>W/EGL_emulation: eglSurfaceAttrib not implemented
>W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fca6d3b8380, error=EGL_SUCCESS
>D/OpenGLRenderer: endAllStagingAnimators on 0x7fca6d1e4c00 (ListView) with handle 0x7fca6406c080
>V/LOG: (433 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Received headers:
> HTTP/1.0 200 OK
> Date: Tue, 17 Jan 2017 13:28:12 GMT
> Server: WSGIServer/0.1 Python/2.7.12
> Vary: Accept
> X-Frame-Options: SAMEORIGIN
> Content-Type: application/json
> Allow: GET, HEAD, OPTIONS
>D/LOG: (433 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Response is not cacheable
>V/LOG: (433 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Final (post cache response) headers:
> HTTP/1.0 200 OK
> Date: Tue, 17 Jan 2017 13:28:12 GMT
> Server: WSGIServer/0.1 Python/2.7.12
> Vary: Accept
> X-Frame-Options: SAMEORIGIN
> Content-Type: application/json
> Allow: GET, HEAD, OPTIONS
>D/LOG: (433 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: Connection successful
>V/LOG: (434 ms) http://10.0.2.2:8080/api/comentario/cliente/00013436415782/?format=json: closing out socket (exception)
And here is the Json acquired by a browser REST client: 这是浏览器REST客户端获取的Json:
{
"id_comentario": 5,
"id_venda_vendas": {
"id_venda": 139,
"id_cliente_cliente": {
"id_cliente": 22,
"nome": "nome",
"telefone": "nao_tem_ainda_layout",
"cpf": "cpf",
"endereco": "endereco",
"primeira_vez": true,
"data_nascimento": "dob",
"observacao": null,
"foto": null,
"email": "nao_tem_ainda_layout",
"id_ultima_compra": {}
},
"id_loja_loja": {
"id_loja": 2,
"nome": "nome",
"nome_fantasia": "nomefantasia",
"cnpj": "cnpj"
},
"data": "2016-11-18",
"hora": "15:36:02"
},
"id_funcionario_funcionario": {
"id_funcionario": 2,
"nome": "nome",
"cargo": "cargo"
},
"id_tipo_comentario_tipo_comentario": {
"id_tipo_comentario": 2,
"tipo": "Tipo"
},
"descricao": "nao tem descricao"
}
]
The point is, why I can get it from the REST client and Ion says that Response is not cacheable? 关键是,为什么我可以从REST客户端获得它,而Ion说Response是不可缓存的? And what does it mean?
那是什么意思呢?
OBS: I can get successful results from other query. OBS:我可以从其他查询中获得成功的结果。 But since the post is too long I'll not post it here.
但是由于发布时间太长,因此我不会在此处发布。
Ion automatically cache all GET
requests. 离子会自动缓存所有
GET
请求。 And your server, as i see, sends header Cache-Control: no-cache
, means that this request is not allowed to be cached. 正如我所看到的,您的服务器发送标头
Cache-Control: no-cache
,这表示不允许缓存此请求。 You can change your cache policy on server or add .noCache()
to your request. 您可以更改服务器上的缓存策略,也可以将
.noCache()
添加到您的请求中。
Thanks to Orest Savchak I could solve it using: 感谢Orest Savchak,我可以使用以下方法解决它:
Ion.getDefault(getApplicationContext()).configure().getResponseCache().setCaching(false);
For more reading, check: 有关更多阅读,请检查:
https://github.com/koush/ion/issues/228 https://github.com/koush/ion/issues/228
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.