java - 使用 Retrofit 在 Android ( Java) 中发送 POST 请求,.. 工作类似于以下 python 代码
问题描述
我需要从 android 应用程序调用 API,但无法使其正常工作。相同的 py 代码可以正常工作。如何使用 Retrofit 在 Android 中移植以下 python 代码?
import requests
import json
head = {'X-API-KEY':'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
args = {'item1', 'value'}
c = requests.post("http_link",data=json.dumps(args),headers=head)
print(c.text)
如果没有使用改造库的解决方案可用,请分享。我尝试通过以下方式使用改造库在应用程序中实现上述python代码......界面:
public interface Safety_aws_api {
String BASE_URL = "httplink";
@Headers("{X-API-KEY:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}")
@POST("Apisender")
Call<ModelApiResponse> getApi(@Body Model_ApiCaller model_apiCaller);
}
模型类:
public class Model_ApiCaller {
public String getApiName() {
return apiName;
}
public void setApiName(String apiName) {
this.apiName = apiName;
}
private String apiName;
public Model_ApiCaller( String apiName){
this.apiName = apiName;
}
public Model_ApiCaller(){
}
}
public class ModelApiResponse {
private String types, Api;
public String getTypes() {
return types;
}
public void setTypes(String types) {
this.types = types;
}
public String getApi() {
return Api;
}
public void setApi(String api) {
Api = api;
}
}
助手类:
public class RetroHelper {
private static Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Safety_aws_api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
public static Safety_aws_api api = retrofit.create(Safety_aws_api.class);
}
调用函数:
private void getCodes( Model_ApiCaller model_apiCaller) {
Call<ModelApiResponse> call = RetroHelper.api.getApi(model_apiCaller);
call.enqueue(new Callback<ModelApiResponse>() {
@Override
public void onResponse(Call<ModelApiResponse> call, Response<ModelApiResponse> response) {
tv_sample_data.setText( response.body().getApi());
}
@Override
public void onFailure(Call<ModelApiResponse> call, Throwable t) {
Toast.makeText( MainActivity.this, "errr", Toast.LENGTH_SHORT);
tv_sample_data.setText("erererer");
}
});
}
解决方案
尝试使用以下代码添加标题。如果输出相同,请分享您当前对 API 调用的响应。
Call<ModelApiResponse> getApi(@Header("X-Authorization") String apiKey,@Body Model_ApiCaller model_apiCaller);
推荐阅读
- mongodb - 仅从 mongoose 组/聚合操作返回原始文档
- objective-c - NSUndoManager is undoing all changes done during a mouseDrag with single Undo
- fullcalendar - fullcalendar events not displayed after next
- javascript - 在动态字段上触发 Enter
- python - Saver.save 在每个折叠中都变得越来越慢
- r - 如何知道 R 包依赖于哪些 linux 库?
- xml - XSLT 翻译问题
- puppeteer - 用于抓取的 Puppeteer JS 标头
- c - C 是否可以将值用作枚举名称?
- html - Qt QML WebEngineView 默认工具提示在html内容中显示不正确