Невозможно сделать запрос @Post с помощью retrofit2 в android - PullRequest
1 голос
/ 29 мая 2020

Я учусь использовать дооснащение в android, но всякий раз, когда я пытаюсь получить данные из inte rnet, мое приложение ничего не возвращает Мой ответ не был успешным, и я не знаю, как исправить ошибка, в настоящее время я пытаюсь опубликовать и получить данные с этого URL-адреса, используя https://jsonplaceholder.typicode.com. Я не могу понять, что вызывает это.

MainActivity

 private void createpost() {

        Post post2=new Post(1,"This is Title","10");

        Call<Post> postCall= mWebService.createPost(post2);

        postCall.enqueue(new Callback<Post>() {
            @Override
            public void onResponse(Call<Post> call, Response<Post> response) {

                if (response.isSuccessful())
                {
                    Log.d(TAG,"response.isSuccessful()");
                    mLog.setText(String.valueOf(response.code()));
                    showPost(response.body());

                }
            }

            @Override
            public void onFailure(Call<Post> call, Throwable t) {

            }
        });


    }

Интерфейс

public interface MyWebService {

 String BASE_URL="https://jsonplaceholder.typicode.com/";

Retrofit retrofit=new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();


    @POST("posts")
    Call<Post> createPost(@Body Post post);

}

1 Ответ

2 голосов
/ 29 мая 2020

По неизвестной причине https://jsonplaceholder.typicode.com вызывает исключение тайм-аута сокета, тем временем вы можете проверить другой веб-сайт с аналогичной функциональностью https://reqres.in/ вот пример кода, прикрепленный к сообщению

final HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        final OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .build();
        final String host = "https://reqres.in/";

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(HttpUrl.parse(host))
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        ReqResApi api = retrofit.create(ReqResApi.class);

        api.createUser(new User("silentsudo", "dev"))
                .enqueue(new Callback<User>() {
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {
                        System.out.println("Resp Success full: " + response.body().toString());
                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable throwable) {
                        System.err.println("Error calling api");
                        throwable.printStackTrace();
                    }
                });

Api

 interface ReqResApi {
        @POST("api/user")
        Call<User> createUser(@Body User post);
    }

POJO

class User {
        private String name;
        private String job;

        public User(String name, String job) {
            this.name = name;
            this.job = job;
        }

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", job='" + job + '\'' +
                    '}';
        }
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...