You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RetroFit双查询加载JSON数据时出现NullPointerException问题

嘿,我来帮你搞定Retrofit传递双查询参数的问题!

实现Retrofit双查询参数的解决方案

你需要先明确Retrofit接口的参数定义,再完善调用逻辑,确保搜索关键词和分类(艺人/专辑)能正确传递给API。

1. 定义Retrofit接口

先创建一个接口类,用@Query注解声明两个查询参数,对应你的搜索关键词和分类:

public interface MusicSearchApi {
    // 替换成你实际的API端点路径
    @GET("search")
    Call<YourResponseModel> searchMusic(
        @Query("term") String searchTerm, // 对应搜索关键词的参数名,要和API要求一致
        @Query("category") String searchCategory // 对应分类的参数名,按需修改
    );
}

这里的YourResponseModel是你根据API返回的JSON结构创建的实体类,记得用Gson或Moshi做解析适配。

2. 完善你的搜索方法

把你现有的代码补全,完成Retrofit初始化和接口调用:

public void ArtistSearch() {
    String searchTerm = searchTxt.getText().toString().trim();
    String searchCat = searchPick.getSelectedItem().toString().trim();

    // 先做输入校验,避免无效请求
    if (searchTerm.isEmpty()) {
        // 可以给用户一个提示,比如Toast
        return;
    }

    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("你的API基础地址") // 替换成实际的API根地址
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.client(httpClient.build()).build();
    MusicSearchApi api = retrofit.create(MusicSearchApi.class);

    // 调用接口,传入两个查询参数
    Call<YourResponseModel> call = api.searchMusic(searchTerm, searchCat);
    call.enqueue(new Callback<YourResponseModel>() {
        @Override
        public void onResponse(Call<YourResponseModel> call, Response<YourResponseModel> response) {
            if (response.isSuccessful() && response.body() != null) {
                // 这里处理返回的有效数据,比如更新UI展示搜索结果
                YourResponseModel resultData = response.body();
                // TODO: 写你的数据处理逻辑
            } else {
                // 请求成功但数据异常,处理错误场景
            }
        }

        @Override
        public void onFailure(Call<YourResponseModel> call, Throwable t) {
            // 处理网络请求失败的情况,比如提示用户网络异常
            t.printStackTrace();
        }
    });
}

3. 关键注意事项

  • 确保@Query里的参数名和API文档要求的完全一致,比如API用q代表关键词,就把@Query("term")改成@Query("q")。
  • 记得在build.gradle里添加Gson转换器依赖:
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 可以用最新版本号
    
  • 输入校验很重要,避免用户空关键词时发送无效请求,提升体验。

如果还有API结构、实体类解析这类细节问题,随时提出来就行!

内容的提问来源于stack exchange,提问作者Yellowman94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:25:25