在回调Android Studio中获取失败响应

时间:2017-06-05 21:28:14

标签: java android callback retrofit retrofit2

我正在尝试从我的服务器获取一个List,就像我在其他类中完成的一样,并且它有效。 但现在我在这个回调中遇到错误。总是去失败 我用邮递员测试,服务器很好地返回列表。

         RetrofitOwn retro = new RetrofitOwn();
        Retrofit retrofit = retro.getObjectRetrofit();

        GitHubClient etakemonsusuario = retrofit.create(GitHubClient.class);

        Call<List<Captura>> call = etakemonsusuario.getCapturasUsuario(idloged);

        call.enqueue(new Callback<List<Captura>>() {
            @Override
            public void onResponse(Call<List<Captura>> call, Response<List<Captura>> response) {
                if (response.isSuccessful()){

                    listView = (ListView) findViewById(R.id.listEtakemons);
                    listarecibida = (List<Captura>) response.body();
                    listacapturas = new ArrayList<String>();

                    for (int i = 0; i < listarecibida.size(); i++) {
                        Captura captura = listarecibida.get(i);
                        listacapturas.add(captura.getNombreetakemon());
                    }

                    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>
                            (EtakemonsUsuario.this, android.R.layout.simple_list_item_1, listacapturas);
                    listView.setAdapter(arrayAdapter);
                }
                else{
                    Toast.makeText(EtakemonsUsuario.this, "Peticion erronea!", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<List<Captura>> call, Throwable t) {
                Toast.makeText(EtakemonsUsuario.this, "No hay conexión!", Toast.LENGTH_SHORT).show();
                 Log.d(tag, "ERROR al conectar!");
            }
        });

接口中的API调用声明如下:

@GET ("usuario/{id}/get_capturas")
        Call<List<Captura>> getCapturasUsuario(@Path("id") int id);

服务器控制器的代码也是:

        @GET
    @Path("/{id}/get_capturas")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getCapturasUsuario(@PathParam("id") int idUsuario){

        Usuario usuario = new Usuario();
        if (idUsuario != 0){
            Usuario usuario2 = new Usuario();
            List<Captura> capturaList =  usuario2.getCapturasUsuario(idUsuario);
//            for (int i = 0; i < capturaList.size(); i++){
//                System.out.println(capturaList.get(i).getNombreetakemon());
//            }
            GenericEntity<List<Captura>> entity = new GenericEntity<List<Captura>>(capturaList) {};
            return Response.status(201).entity(entity).build();
        }
        else
        {
            String noResult = "No tiene capturas.";
            return Response.status(404).entity(noResult).build();
        }
    }

控制器调用的函数是:

public List<Captura> getCapturasUsuario(int id) {
List<Captura> listaCapturaUsuario = new ArrayList<Captura>();
try {
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM Captura WHERE captura.idusuariosss = " + id);
    while (rs.next()) {
        Captura capturaUsuario = new Captura();
        capturaUsuario.setId(rs.getInt("id"));
        capturaUsuario.setIdusuariosss(rs.getInt("idusuariosss"));
        capturaUsuario.setIdetakemon(rs.getInt("idetakemon"));
        capturaUsuario.setNivel(rs.getInt("nivel"));
        capturaUsuario.setExperiencia(rs.getInt("experiencia"));
        capturaUsuario.setVida(rs.getInt("vida"));
        capturaUsuario.setAtaque(rs.getInt("ataque"));
        capturaUsuario.setDefensa(rs.getInt("defensa"));
        capturaUsuario.setEstado(rs.getInt("estado"));
        capturaUsuario.setFecha(rs.getDate("fecha"));
        capturaUsuario.setNombreetakemon(rs.getString("nombreetakemon"));
        capturaUsuario.setHabilidadetakemon(rs.getString("habilidadetakemon"));
        capturaUsuario.setTipoetakemon(rs.getInt("tipoetakemon"));
        capturaUsuario.setImagen(rs.getString("imagen"));
        listaCapturaUsuario.add(capturaUsuario);
    }
} catch (SQLException e) {
    e.printStackTrace();
    logger.error("getCapturasUsuario: "+e.getMessage());
}

return listaCapturaUsuario;

}

任何人都知道问题出在哪里?

我认为来自服务器的响应是成功的,但android studio说它不成功

非常感谢!

我刚发现这个error

1 个答案:

答案 0 :(得分:0)

您需要定义日期格式来解析日期。在您的改造实例中使用gson构建器。试试这个:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
}

希望有所帮助