使用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
相关产品推荐
相关产品推荐

