Охтп пост вернуть ноль - PullRequest
0 голосов
/ 09 января 2020

Я напечатал json в исполнении, я скопировал его, я пробую те же json и URL в почтальоне, и он работает, поэтому я не думаю, что проблема с URL или json. переменная rs в main всегда равна нулю

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+"}";
}

}

main:

            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() );
            }

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Проблема была java. net .ConnectException: я изменил localhost (127.0.0.1) на 10.0.2.2, потому что эмулятор Android работает на виртуальной машине

, тогда у меня возникла проблема java. net .SocketTimeoutException: тайм-аут, который я добавил:

    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();

Теперь он работает

0 голосов
/ 09 января 2020

Это ваш отформатированный Json:

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

Мне кажется, что lt и lg всегда будут иметь + вокруг них.

Почему нет? t вы используете String.format например:

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