【问题标题】:Retrofit get a response message from server via POST method改造通过 POST 方法从服务器获取响应消息
【发布时间】:2016-04-08 12:21:04
【问题描述】:

我有一个名为 SendPoints 的方法,它使用户能够相互发送点数并且它正在工作。现在,如果事务不成功,我需要从服务器检索 JSON 格式的错误消息:

这些是重要的类:

Service.java
@POST("/api/SendPoints")
Call<Void> SendPoints(@Body SendPoints SendPoints);

网络 SDK 类

NetworkSDK
  public void SendPoints (SendPoints SendPoints, Callback<Void> callback){
    Call<Void> call = BaseClient.getService().SendPoints(SendPoints);
    call.enqueue(callback);
}

这是我需要检索的对象

public class ReturnMessage {

    private String Message;

    /**
     *
     * @return
     * The Message
     */
    public String getMessage() {
        return Message;
    }

    /**
     *
     * @param Message
     * The Message
     */
    public void setMessage(String Message) {
        this.Message = Message;
    }
}

这是调用方法:

NetworkSDK.getInstance().SendPoints(Posiljka, new Callback<Void>() {
                @Override
                public void onResponse(Call<Void> call, Response<Void> response) {
                    Log.d("Kartica", Posiljka.getCardNumber());
                    Log.d("Broj bodova", Posiljka.getAmount().toString());
                    Log.d("Response code:", "" + response.code());

                    if (response.code() == 200) {
                        Toast.makeText(getActivity(), "Points are sent !", Toast.LENGTH_SHORT).show();

                    }
                    else
                        Toast.makeText(getActivity(), "Points are not sent !", Toast.LENGTH_SHORT).show();

                    ****Here i want to get toast messages that server will return ( server will return strings (-1,-2,-3,-4 etc and I need to write message for**** 


                }

                @Override
                public void onFailure(Call<Void> call, Throwable t) {
                }
            });
        }catch (Exception e) {
            Toast.makeText(getActivity(), "Error !", Toast.LENGTH_SHORT).show();

        }  
    }
});

【问题讨论】:

    标签: java android android-studio retrofit retrofit2


    【解决方案1】:

    至少有两种方法可以处理您的问题。

    1. 在方法 SendPoints 中引发异常并由 ExceptionHandler [JAX-RS / Jersey how to customize error handling?) 进行转换
    2. 正如@Exaqt 所述,您可以声明一个带有状态码的通用返回类型。

    我个人可能更喜欢第一种方法,因为它可以帮助我构建代码并分配逻辑(我可以声明 ExceptionHandler 以返回 HttpStatus 代码和其中的响应正文)。

    【讨论】:

      【解决方案2】:

      改变这个方法

      @POST("/api/SendPoints")
      Call<Void> SendPoints(@Body SendPoints SendPoints);
      

      通过声明Void,您不会期待任何事情

      如果您希望来自服务器的 String,请将其更改为 Call&lt;String&gt;


      编辑:

      您还可以通过以下方式获取 HTTP 响应标头:

      @Override
      public void onFailure(Call<Void> call, Throwable throwable) {
          if (throwable instanceof HttpException) {
              ((HttpException) throwable).message(); // HTTP status message
              ((HttpException) throwable).code(); // HTTP status code
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 2016-01-30
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多