2016-09-24 2 views
0

Я пытаюсь реализовать запрос POST через Retrofit, но, похоже, подход кажется неправильным. Я последовал шаги, которые я использовал для запроса GET:Отправить параметры POST с помощью Retrofit

Я определил конечную точку:

public interface GitHubEmailAPI { 

@POST("https://stackoverflow.com/users/{user}") 
Call<GitHubEmail> postEmail(@Field("email") String email); 

}

Модель:

public class GitHubEmail { 

@SerializedName("email") 
private String email; 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

}

И призвание :

public void postEmail(){ 
    GitHubEmailAPI apiService = 
      ApiClient.getClient().create(GitHubEmailAPI.class); 

    final Call<GitHubEmail> callEmail = apiService.postEmail 
      (String.valueOf(enterEmailEt.getText())); 

    callEmail.enqueue(new Callback<GitHubEmail>() { 
     @Override 
     public void onResponse(Call<GitHubEmail> call, Response<GitHubEmail> response) { 
      testTV.setText(callEmail.toString()); 
     } 

     @Override 
     public void onFailure(Call<GitHubEmail> call, Throwable t) { 
      Log.e("Email", t.toString()); 

     } 
    }); 

Я использую github api в качестве теста, не уверен, что токен доступа должен быть включен в качестве параметра в запросе. Большое спасибо!

+0

Является ли ваше сомнение ясно ?? – sushildlh

ответ

3

Есть некоторая информация, которая вы знаете о Модернизированный ....

  1. Ваш base_url должен быть заканчиваться /.

  2. Когда вы используете нотацию @Field, вы должны поставить @FormUrlEncoded в свой призыв Api.

  3. Когда вы используете {user} в методе API, вы должны использовать @Path("user") String user для связи с данными URL.

  4. Ваш URL-адрес метода POST будет выглядеть следующим образом: @POST("users/{user}").

  5. Когда ваш ответ Обратный звонок сделал фактические данные внутри вашего Response<GitHubEmail> response в этой переменной. Вы должны использовать response.body(), чтобы получить ответ от API CALL.

принять, пожалуйста, смотрите на ниже код ....

callEmail.enqueue(new Callback<GitHubEmail>() { 
     @Override 
     public void onResponse(Call<GitHubEmail> call, Response<GitHubEmail> response) { 
       if (response.isSuccessful()) { 
         if (response.body().getSuccess()) 

          Toast.makeText(ClassName.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); 
         else 
          Toast.makeText(ClassName.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); 
        } else 
         Toast.makeText(ClassName.this, "Sorry for inconvince server is down", Toast.LENGTH_SHORT).show(); 

     } 

     @Override 
     public void onFailure(Call<GitHubEmail> call, Throwable t) { 
       Toast.makeText(ClassName.this, "Check your Internet connection", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
+0

Большое спасибо, @sushildlh! – user6456773

+0

Добро пожаловать .... – sushildlh

+0

после того, как я осуществил то, что вы посоветовали мне сделать, тело ответа равно null, тело ошибки говорит «Не найдено». Как насчет ввода токена доступа, например? Или это означает, что путь неправильный? – user6456773

4

Для POST inretrofit необходимо включить @FormUrlEncoded

@FormUrlEncoded 
@POST("path_here") 
Call<ResponseBody> function_name(@Field("data") String data); 
Смежные вопросы