Retrofit通过POST方法从服务器获取响应消息

时间:2016-04-08 12:21:05

标签: java android android-studio retrofit retrofit2

我有一个名为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();

        }  
    }
});

2 个答案:

答案 0 :(得分:0)

更改此方法

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

通过声明Void

,您没有任何期望

如果您希望服务器Call<String>

,请将其更改为String

编辑:

您还可以通过以下方式获取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
    }
}

答案 1 :(得分:0)

至少有两种方法可以对待你所要求的东西。

  1. 在方法SendPoints中抛出异常并由ExceptionHandler [JAX-RS / Jersey how to customize error handling?转换
  2. 如@Exaqt所述,您可以声明一个带有状态代码的泛型返回类型。
  3. 就我个人而言,我可能更喜欢第一个方法,因为它可以帮助我构建代码并分发逻辑(我可以声明ExceptionHandler返回HttpStatus代码和响应体)。