我想使用body raw在API上发布数据,但在响应时总是得到null。正文和数据不发送。
以下是我的改装课程:
public class ApiClient {
public static Retrofit retrofit;
private static final String BASE_URL = BuildConfig.BASE_URL;
public static Retrofit getRetrofitInstance(){
if (retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
下面是界面:
public interface SendData {
@POST("/")
Call<DataItem> sendData(@Body DataItem body);}
有类模型:
public class DataItem{
private String date;
private String imgUrl;
private double probability;
private String latitude;
private String longtitude;
private String className;
public DataItem(String date, String imgUrl, double probability, String latitude, String longtitude, String className) {
this.date = date;
this.imgUrl = imgUrl;
this.probability = probability;
this.latitude = latitude;
this.longtitude = longtitude;
this.className = className;
}
public String getDate(){
return date;
}
public String getImgUrl(){
return imgUrl;
}
public double getProbability(){
return probability;
}
public String getLatitude(){
return latitude;
}
public String getLongtitude(){
return longtitude;
}
public String getClassName(){
return className;
}
}
以下是更新后的数据:
DataItem data = new DataItem(currentDate, imgUrl, probability, latitude, longitude, class_name);
SendData service = ApiClient.getRetrofitInstance().create(SendData.class);
Call<DataItem> call = service.sendData(data);
call.enqueue(new Callback<DataItem>() {
@Override
public void onResponse(Call<DataItem> call, Response<DataItem> response) {
String result = String.valueOf(response.body());
Log.d("MainActivity", "response = " + response.message());
Log.d("MainActivity", "result = " + result);
timingSendData();
Toast.makeText(MainActivity.this, "Data Send!", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<DataItem> call, Throwable t) {
Log.d(TAG, "onFailure: "+t.getMessage());
Log.d(TAG, "onFailure: "+t.getLocalizedMessage());
Toast.makeText(MainActivity.this, "Cannot Send Data!", Toast.LENGTH_SHORT).show();
}
});
我已经在模型中使用了serilaizaton,也使用了hashmap
编辑:遵循@DinkarKumar建议后,将数据发布到API是可行的。但让我困惑的是,响应不是在方法onResponse()上,而是在方法onFailure()上,至少数据可以发布到API。PS:我移动了API的URL
你的响应不是json对象,而是列表。你应该改变你的界面。我想这就是onFailure()触发器的原因。
public interface SendData {
@POST
Call<List<DataItem>> sendData(@Body DataItem body);
}
或者你只需要用json对象包装这个列表。
除了@DinkarKumar推荐的更改之外,您应该有这个Content-Type
头
@Headers({"Content-Type: application/json"})
@POST("/")
Call<String> sendData(@Body DataItem body);}
API也在postman中进行了测试,并且已经运行了
——在postman中,如果删除内容类型头,您将获得HTTP 400和
{
"msg": "Missing JSON in request"
}
您应该将类名
更改为类名
,因为这是真正的字段名,或者如果您想坚持使用类名
,那么您应该注释类名
。下面是使用GSON库语法的示例。
@SerializedName("class_name")
public String className;
而且你的回复不是DataItem,而是我和邮递员测试时添加的字符串图像。
所以我认为你也应该改变
Call<DataItem> sendData(@Body DataItem body);
到
Call<String> sendData(@Body DataItem body);
问题内容: 我正在尝试登录此网站:http : //deeproute.com 这是我的代码。 不幸的是,这只是以未登录状态返回同一页面。我究竟做错了什么? 问题答案: 您需要在发布前阅读表格!您缺少param subbera =登录。
如何查看改装错误正文消息?我所看到的是字节数组,我读它有困难。
我正在尝试使用Volley库与我的RESTful API通信。 当我要持票人代币时,我必须在身体里贴上绳子。字符串应如下所示:grant_type=password 有关WebApi个人帐户的更多信息:http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api 不幸的是,我不知道如何解决它... 我正在尝试
问题内容: 我对使用Apach JMeter有疑问。 我们的项目Android应用将具有“ Gzip压缩”功能的json数据发布到API服务器。使用“ Apache HttpClient”及其“ GzipCompressingEntity”类的Android应用。 为了对API服务器进行性能测试,我尝试通过JMeter的代理(=“ HTTP(S)Test Script Recorder”)记录请求
我有一个表格位于https://pnrbuilder.com/_popups/feedback_popup.html 表单使用post将输入传递到php页面,该页面发送包含post内容的电子邮件,然后重定向用户。 输入字段工作正常,但textarea内容无法发送到电子邮件。 知道我做错了什么吗? PHP页面: 如果我把下面的内容放在我的php页面的顶部,它会回显textarea的内容
因此,我试图让一个不和谐机器人在服务器上的特定通道中发布消息,因为它只发布到#Everyone。我已经看了许多其他的帖子,似乎无法得到它。我是个完全的javascript白痴,只知道非常基本的基础知识。目标是当用户在一个通道中说“test”时,机器人将把“test”输出到一个特定的通道中,用于记录某些响应。(当用户说了一些他们不应该说的话时,这将成为一个冒犯日志)。到目前为止,我的代码是这样的: