Android Studio - 使用 retrofit2 从 restdb 获取信息

Posted

技术标签:

【中文标题】Android Studio - 使用 retrofit2 从 restdb 获取信息【英文标题】:Android Studio - Using retrofit2 to get info from restdb 【发布时间】:2021-07-28 12:53:33 【问题描述】:

我正在尝试使用 Retrofit2 为我的 android 应用程序创建一个 GET 请愿书。我遵循了有关如何创建代码的教程,并且它适用于不需要任何身份验证的网页。然后我尝试根据我的需要调整相同的代码,但我无法做到正确。要么我收到 401 错误,要么我收到 500 错误。

我想访问这个网址:http://adaptai-eea8.restdb.io/rest/usuarios 所以我的baseurl是http://adaptai-eea8.restdb.io/。 这是我的函数,在 MainActivity 中:

private void find(String codigo)
    String apikey = "9dc3afb8b6087192d5e9e50c5f2cb44927be5";

    Retrofit retrofit = new Retrofit.Builder().baseUrl("http://adaptai-eea8.restdb.io/")
            .addConverterFactory(GsonConverterFactory.create()).build();

    UsuarioAPI usuarioAPI = retrofit.create(UsuarioAPI.class);
    Call<Usuario> call = usuarioAPI.find(codigo);
    call.enqueue(new Callback<Usuario>() 
        @Override
        public void onResponse(Call<Usuario> call, Response<Usuario> response) 
            try 
                int a = 5;
                if(response.isSuccessful())
                    Usuario u = response.body();
                    textView.setText(u.getContra());
                    Log.d("Funciona", u.getContra());
                


            catch(Exception ex)
                Toast.makeText(MainActivity.this, ex.getMessage(), Toast.LENGTH_SHORT);
            
        

        @Override
        public void onFailure(Call<Usuario> call, Throwable t) 
            Toast.makeText(MainActivity.this, "Error de conexión", Toast.LENGTH_SHORT);
        
    );

这是我正在使用的 GET 请愿:

    @Headers("User-Agent: my-restdb-app","Content-Type: application/x-www-form-urlencoded", "x-apikey: heregoestheapikey", "Accept: application/json", "cache-control: no-cache")
//@FormUrlEncoded
@GET("rest/usuarios/")
//public Call<Usuario> find(@Query("nombre") String nombre);
Call<Usuario> find(@Query("nombre") String nombre);

这段代码一定有问题,可能与将 apikey 作为标头发送有关,我不知道。有人能告诉我我哪里错了吗?提前致谢。

【问题讨论】:

【参考方案1】:

如果您想将 apiKey 作为标头传递,则需要将其作为参数传递,就像您在 docs 中看到的那样

@Headers("User-Agent: my-restdb-app","Content-Type: application/x-www-form-urlencoded", "Accept: application/json", "cache-control: no-cache")
@GET("rest/usuarios/")
Call<Usuario> find(@Header("x-apikey") String apiKey, @Query("nombre") String nombre);

另外,你确定其余的参数吗?就像 User-Agent 是“my-restdb-app”并且查询参数名称是“nombre”

【讨论】:

嗨,我完全不确定标题。我一直在尝试很多组合,并且我尝试复制与 Postman 中相同的标题(我可以使用 Postman 访问数据库而没有任何问题)。是的,查询应该没问题。有没有更简单或更正确的方法将我的应用程序连接到在线数据库?我可以迁移到任何其他类型的数据库,我只需要它“易于”编程。

以上是关于Android Studio - 使用 retrofit2 从 restdb 获取信息的主要内容,如果未能解决你的问题,请参考以下文章

air jordan 13 retro 2017 reviews and story

javascript bootstrap_retro_prepworx.js

Air Jordan 8 Retro Performance Review

在应用程序中初始化Retrofit客户端

参数量仅为4%,性能媲美GPT-3:开发者图解DeepMind的RETRO

MVCMVPMVVM模式对比总结用户登录例子