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

改造后生管柱体

廖诚
2023-03-14

我正在使用改装向服务器发送POST请求。帖子正文的格式必须是jdata={“key1”:“value1”,…}以及设置为application/x-www-form-urlencoded的内容类型标题。我发现了一个类似的问题,但公认的答案不起作用。

这是我试过的-

我的界面

public interface APIHandler {
    @Headers("Content-Type: application/x-www-form-urlencoded")
    @FormUrlEncoded
    @POST(URL)
    Call<ResponseBody> getdata(@Field("jdata") String jdata);
}

调用函数

public void load() {
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("BASE_URL")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

// prepare call in Retrofit 2.0
APIHandler iAPI = retrofit.create(APIHandler.class);

String requestBody = "{\"id\":\"value\",\"id1\":\"value2\"}"
Call<ResponseBody> call = iAPI.getData(requestBody);

call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> c, Response<ResponseBody> response) {
        if (response.isSuccess()) {
            ResponseBody result = response.body();
            String gs = new Gson().toJson(result);
            Log.d("MainActivity", "response = " + gs + " status: " + statusCode);

        } else {
            Log.w("myApp", "Failed");
        }
    }

    @Override
    public void onFailure(Call<ResponseBody> c, Throwable t) {
    }
});
}

但是我收到了response=nullstatus=200。我做错了什么?预期的响应只是一个字符串,而不是JSON数组。

共有2个答案

姚钊
2023-03-14

你可以这样使用。我已经测试过了,效果很好

public interface APIHandler {
    @POST(URL)
    Call<ResponseBody> getdata(@Body JsonObject body);
}

请求机构:

JsonObject requestBody = new JsonObject();
requestBody.addProperty("id", "value1");
requestBody.addProperty("id1", "value2");

在改造2.0中准备呼叫

APIHandler iAPI = retrofit.create(APIHandler.class);

和调用功能:

 Call<ResponseBody> call = iAPI.getData(requestBody);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> c, Response<ResponseBody> response) {
            if (response.isSuccess()) {
                String result = response.body().string();

                Log.d("MainActivity", "response = " + result);

            } else {
                Log.w("myApp", "Failed");
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> c, Throwable t) {
        }
    });
宗安宁
2023-03-14

我把这个留在这里是为了帮助别人。

上面的代码是正确的。正如我在最后一行提到的,期望一个普通的字符串响应。但是由于它不是JSON响应,转换可能不起作用,响应为空。我能找到的唯一解决方案是直接将响应转换为字符串-

try {
        stresp = response.body().string()
        Log.d("MainActivity", "response = " + stresp + " status: " + statusCode);
    } catch (IOException e) {
                    //Handle exception
}

也许有更好的方法来处理这个问题,但这对我来说很有效!

 类似资料:
  • 我对SSIS非常陌生,我有现有的SQL表,我想将数据加载到十进制(10,2)列中,但是.csv文件作为源文件包含值,因此我试图使用派生列和表达式将值替换为 我已将平面文件源输出-输出列更改为 派生列输出-Columns输出设置为 SSIS接受所有这些,但在为派生列运行包时会出现错误,如下所示 [派生列[2]]错误:SSIS错误代码DTS_E_InsidedTransformFailureOnErr

  • 问题内容: 我正在实现登录功能,并为此使用Post请求,但是我收到错误提示 “ retrofit.RetrofitError:com.squareup.okhttp.internal.http.HttpMethod.METHODS” 下面是我的代码 在它下面的logcat输出。 02-10 13:02:43.846:W / System.err(30684):retrofit.RetrofitEr

  • 我正在尝试构建一个Flutter应用程序并在此过程中学习Dart,但在调试时我有点沮丧。我从API获取了一个资源,现在我想将JSON字符串打印到控制台,但它一直在切断字符串。 所以我实际上有两个问题:终端控制台真的是打印调试消息的唯一方法吗?我如何在控制台打印大字符串而不会自动切断它们?

  • 我在使用LiquiBase更改postgres db中的列长度时遇到了问题。 我有一个字段描述为varchar(300)的表帐户。我想把它改成varchar(2000)。 我已经在同一个文件中删除并重新创建了主键,因此我没有权限、问题、模式/数据库名称或类似的任何东西。为了测试,我清除了表中的数据。 任务“:db-management:update”执行失败。

  • 我有一个场景,我必须调用具有相同基本URL的API,例如,但具有不同的。 我有一个Retrofit 2的实例,它是通过构建的: 如下所示: 对于某些,我必须调用相同的API,但在其他情况下,我必须从完全不同的调用它。如何更改实例以因此在运行时指向不同的URL? 改装实例没有

  • 重头戏来了,打开conf/ioc/dao.js, 修改dao的定义 dao : { type : "org.nutz.dao.impl.NutDao", args : [{refer:"dataSource"}], fields : { interceptors : [{ref