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

Android Retrofit 2获取WordsAPI同义词无名字符串列表技术问询

解决Retrofit 2调用WordsAPI同义词接口的问题

嘿,我来帮你搞定这个Retrofit调用的问题!针对WordsAPI返回的特殊JSON结构,咱们一步步来实现:

1. 先添加必要的依赖

首先确保你的build.gradle(Module level)里已经添加了Retrofit和Gson转换器的依赖:

dependencies {
    // Retrofit核心库
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    // Gson转换器,用于解析JSON
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

记得同步一下Gradle哦。

2. 创建对应JSON结构的实体类

因为接口返回的JSON是包含word字段和synonyms数组的对象,咱们需要创建一个实体类来映射这个结构,命名为SynonymsResponse就行:

public class SynonymsResponse {
    private String word;
    private List<String> synonyms;

    // 生成getter方法(Retrofit需要通过getter来获取数据)
    public String getWord() {
        return word;
    }

    public List<String> getSynonyms() {
        return synonyms;
    }
}

如果用Kotlin的话,会更简洁:

data class SynonymsResponse(
    val word: String,
    val synonyms: List<String>
)

3. 定义Retrofit的API接口

接下来创建一个接口,用来描述咱们的API请求。注意这里的mashape-key是作为Query参数传递的,接口地址里的go是动态的单词,所以咱们把它设为路径参数:

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface WordsApiService {
    // 路径参数{word}用来替换URL里的具体单词,比如"go"
    // Query参数"mashape-key"传递你的API密钥
    @GET("words/{word}/synonyms")
    Call<SynonymsResponse> getSynonyms(
            @Path("word") String word,
            @Query("mashape-key") String apiKey
    );
}

这样就不用把密钥硬编码在URL里,更灵活也更安全。

4. 初始化Retrofit并发起请求

最后一步就是初始化Retrofit实例,调用接口获取同义词列表了:

// 初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://wordsapiv1.p.mashape.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

// 创建API服务实例
WordsApiService apiService = retrofit.create(WordsApiService.class);

// 发起请求,这里替换成你的实际API密钥
Call<SynonymsResponse> call = apiService.getSynonyms("go", "你的mashape-key");

// 异步执行请求
call.enqueue(new Callback<SynonymsResponse>() {
    @Override
    public void onResponse(Call<SynonymsResponse> call, Response<SynonymsResponse> response) {
        if (response.isSuccessful() && response.body() != null) {
            // 获取同义词列表
            List<String> synonyms = response.body().getSynonyms();
            // 这里就可以处理同义词数据啦,比如打印或者展示到UI上
            for (String synonym : synonyms) {
                Log.d("Synonyms", synonym);
            }
        } else {
            // 处理请求失败的情况,比如打印错误信息
            Log.e("Error", "请求失败: " + response.message());
        }
    }

    @Override
    public void onFailure(Call<SynonymsResponse> call, Throwable t) {
        // 处理网络失败的情况
        Log.e("Network Error", t.getMessage());
    }
});

如果是Kotlin的协程版本,会更简洁:

// 初始化Retrofit
val retrofit = Retrofit.Builder()
    .baseUrl("https://wordsapiv1.p.mashape.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val apiService = retrofit.create(WordsApiService::class.java)

// 在协程中发起请求
CoroutineScope(Dispatchers.IO).launch {
    try {
        val response = apiService.getSynonyms("go", "你的mashape-key")
        if (response.isSuccessful && response.body() != null) {
            val synonyms = response.body()!!.synonyms
            // 切换到主线程更新UI
            withContext(Dispatchers.Main) {
                // 处理同义词数据
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

最后别忘了在AndroidManifest.xml里添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

这样一套流程下来,你就能顺利获取到同义词的字符串列表啦!如果遇到问题,先检查API密钥是否正确,或者网络连接是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:56