2016-09-24 55 views
0

我想通過改進來實現POST請求,但這種方法似乎是錯誤的,我猜。我跟着我用於GET請求步驟:發送POST參數與改造

我所定義的終點:

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. 當您在API方法中使用{user}時,必須使用@Path("user") String user來關聯url數據。

  4. 您的POST方法的URL將如此@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

在我執行了你建議我做的事情之後,響應的正文爲空,錯誤正文說「未找到」。例如,如何設置訪問令牌?或者這意味着,路徑錯了? – user6456773

4

對於POST inretrofit您必須包括@FormUrlEncoded

@FormUrlEncoded 
@POST("path_here") 
Call<ResponseBody> function_name(@Field("data") String data);