我正在尝试将以下代码(java)转换为在kotlin中使用retrofit2发布请求,但是,我发现retrofit2文档很难理解。我试过使用@POST并发送请求但失败了。如果你能给我一些提示或例子,那将是一个很大的帮助。我很乐意听到像你这样的专业人士的消息!
这是我要发送的请求类型
curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk \
-F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" \
-F "query=test"
以下是我想要转换为retrofit2的实际代码
public class TalkAysncTask extends AsyncTask<String, String, String> {
private static final String API_KEY = YOUR API KEY;
private static final String API_URL =
"https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk";
interface Callback{
void onReturn(String s);
}
private Callback callback;
TalkAysncTask(Context context){
callback = (Callback) context;
}
@Override
protected String doInBackground(String... params) {
RequestBody body = new FormBody.Builder()
.add("apikey", API_KEY)
.add("query", params[0])
.build();
Request request = new Request.Builder()
.url(API_URL)
.post(body)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.build();
try{
Response response = client.newCall(request).execute();
return response.body().string();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Log.d("debug", s);
callback.onReturn(s);
}
}
我想知道如何获得以下类型的响应
{
status: 200,
message: "ok",
results: [{
perplexity: 2.3688167429546714,
reply: "tested"
}],
}
我尝试使用以下代码但无法正常工作
interface AiClient {
@FormUrlEncoded
@POST("/talk/v1/smalltalk")
fun request(@Field("apikey") apiKey: String,
@Field("query") query: String?): Call<ApiResponse>
companion object {
fun create(): AiClient {
val retrofit = retrofit2.Retrofit.Builder()
.baseUrl("https://api.a3rt.recruit-tech.co.jp")
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(AiClient::class.java)
}
}
}
答案 0 :(得分:3)
创建模型类:
class ApiResponse(var status:Int, var message:String, var results:MutableList<Results>){
class Results(var perplexity:Double,var reply:String)
}
更改您的AiClient:
interface AiClient {
@FormUrlEncoded
@POST("talk/v1/smalltalk")
fun request(@Field("apikey") apiKey: String,
@Field("query") query: String?): retrofit2.Call<ApiResponse>
companion object {
fun create(): AiClient {
val retrofit = retrofit2.Retrofit.Builder()
.baseUrl("https://api.a3rt.recruit-tech.co.jp/")
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(AiClient::class.java)
}
}
}
致电Api:
AiClient.create().request("yourkey","yourquery").enqueue(object :Callback<ApiResponse> {
override fun onFailure(call: Call<ApiResponse>?, t: Throwable?) {
}
override fun onResponse(call: Call<ApiResponse>, response: Response<ApiResponse>) {
if (response.isSuccessful){
var result=response.body()
if (result!=null){
result.message
}
}
}
})
}