Okhttp 帖子返回 null

Posted

技术标签:

【中文标题】Okhttp 帖子返回 null【英文标题】:Okhttp post return null 【发布时间】:2020-04-27 00:53:08 【问题描述】:

我在执行时打印了 json 我复制了它 我在邮递员中尝试了相同的 json 和 url 并且它正在工作,所以我认为问题不在于 url 或 json 。 main 中的 rs 变量始终为空

public class PostLocation 

public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

public String post(String url, String json) throws IOException 

    RequestBody body = RequestBody.create(json, JSON);
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();


    Response response = null;
    try 

        response = client.newCall(request).execute();  return response.body().string();
     finally 
        if (response != null)  response.close(); 
    



String bowlingJson(Double lg,Double lt) 
    return "\"id\": null,\"datetime\": \"2019-01-10T19:00:00.000+0000\",\"user\": \"id\": 1 ,\"latitude\": "+lt+",\"longitude\": "+lg+"";

主要:

            String rs = null;
            String json = null;
            //post
            try
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);

                PostLocation pl = new PostLocation();
                json = pl.bowlingJson(location.getLongitude(), location.getLatitude());
                System.out.println(json);
                rs = pl.post("http://localhost:8080/api/v1/locations", json);
            catch (IOException EX)
            finally 
                t.setText("\n " + location.getLongitude() + " " + location.getLatitude() );
            

【问题讨论】:

【参考方案1】:

问题是 java.net.ConnectException : 我将 localhost(127.0.0.1) 更改为 10.0.2.2,因为 android 模拟器在虚拟机中运行

然后我遇到了问题 java.net.SocketTimeoutException: timeout 我补充说:

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.connectTimeout(5, TimeUnit.MINUTES) // connect timeout
            .writeTimeout(5, TimeUnit.MINUTES) // write timeout
            .readTimeout(5, TimeUnit.MINUTES); // read timeout

    client = builder.build();

现在可以了

【讨论】:

【参考方案2】:

这是您的格式化 Json:

 
 "id":null,
 "datetime":"2019-01-10T19:00:00.000+0000",
 "user": 
  "id":1
 ,
 "latitude":"+lt+",
 "longitude":"+lg+"

在我看来,ltlg 周围总是有 +。

为什么不使用String.format,例如:

String.format("\"id\": null,\"datetime\": \"2019-01-10T19:00:00.000+0000\",\"user\": \"id\": 1 ,\"latitude\": %f,\"longitude\": %f", lt, lg);

【讨论】:

我尝试过,但同样的问题,就像我说的问题不在 json 字符串或 url 中,因为我在执行应用程序时打印返回的字符串并且我制作了相同的 json 和相同的 url在邮递员中,它正在工作

以上是关于Okhttp 帖子返回 null的主要内容,如果未能解决你的问题,请参考以下文章

OkHttp 以 JSON 形式发布正文

如何使用 OKHTTP 发出 post 请求?

okHttp3 response.code() 不会返回 304

无法让 OkHttp 的 response.body.toString() 返回字符串

OkHttp 响应缓存返回垃圾文本

OKHTTP GET 和 POST 请求返回空正文消息