当前位置: 首页 > 知识库问答 >
问题:

不能张贴使用改造身体原

韩弘壮
2023-03-14

我想使用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

共有3个答案

蒯胜泫
2023-03-14

你的响应不是json对象,而是列表。你应该改变你的界面。我想这就是onFailure()触发器的原因。

public interface SendData {
@POST
Call<List<DataItem>> sendData(@Body DataItem body);
}

或者你只需要用json对象包装这个列表。

韦昊焜
2023-03-14

除了@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"
}
刘和正
2023-03-14

您应该将类名更改为类名,因为这是真正的字段名,或者如果您想坚持使用类名,那么您应该注释类名。下面是使用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”输出到一个特定的通道中,用于记录某些响应。(当用户说了一些他们不应该说的话时,这将成为一个冒犯日志)。到目前为止,我的代码是这样的: