Boa tarde profs. eu tenho uma chamada utilizando o okhttp3, eu sei que foi abordado o retrofrit, mas precisei usar ookhttp sem ele, é possivel eu obter o resultado do onResponse sem que ele volte como nulo para metodo original, porque o meu problema é que como nao aguarda o resultado da operação asincrona, eu obtenho valores nulos, e quando ele volta para onResponse, ele nao retorna para o metodo original com os valores obtidos da api, como eu poderia resolver isso ?
private void pegarDevice() {
//pegar device
try {
ResultCommunic<DeviceCadastrado> device = getDevice.pegarDevice();
if(device.Sucesso()){
carregarDadosDoDevice(device.Valor);
}
}catch (Exception ex){
ex.printStackTrace();
}
}
@RequiresApi(api = Build.VERSION_CODES.N)
private <TResult> ResultCommunic<TResult> _Command(ECommunicAcao pAcao, Object pObjeto, Boolean pRec){
final ResultCommunic<TResult>[] vRetorno = new ResultCommunic[]{new <TResult>ResultCommunic()};
ResultCommunic<TokenResult> vToken = null;
//Referencia https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html
//https://square.github.io/okhttp/
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.retryOnConnectionFailure(true)
.addInterceptor(new AcceptLanguageHeaderInterceptor())
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
Request.Builder builder = new Request.Builder();
Response response = null;
//Token
if(_UseToken){
vToken = _TokenWebDbCommunic.GetTokenAsync(pRec);
if(!vToken.Sucesso()){
vRetorno[0].Mensagem = vToken.Mensagem;
vRetorno[0].Resultado = vToken.Resultado;
return vRetorno[0];
}
}
//Adicionar o token nas request
builder.addHeader("Authorization", "Bearer " + vToken.Valor.getAccess_token());
Gson gson = new Gson();
switch (pAcao) {
case Enviar:
break;
case Recebe:
builder.url(MontaURI((String) pObjeto)).get();
//Request requestGet = builder.build();
//client.newCall(builder.build()).enqueue(requestGetAsync(vRetorno));
client.newCall(builder.build()).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
new Thread(() -> {
// For the example, you can show an error dialog or a toast
// on the main UI thread
});
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
GOSTARIA DE RETORNAR O RESULTADO DO ONRESPONSE
if(response.isSuccessful()){
if(response.code() == HttpURLConnection.HTTP_OK){
vRetorno[0] = gson.fromJson(response.body().string().replace("valor", "Valor"), ResultCommunic.class);
vRetorno[0].Resultado = Resultado.Sucesso;
}else{
vRetorno[0].Mensagem = "Servidor não encontrado";
vRetorno[0].Resultado = Resultado.NaoEncontrado;
}
}
}
});
break;
case Excluir:
builder.url(MontaURI((String) pObjeto)).delete();
//response = client.newCall(builder.build()).execute();
break;
default:
builder.url(MontaURI());
//MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
//Gson gson = new Gson();
//gson.toJson(pObjeto);
//RequestBody body = RequestBody.create(mediaType, gson.toString());
builder.post(null);
//response = client.newCall(builder.build()).execute();
}
return vRetorno[0];
}