【问题标题】:Check json sent by retrofit检查改造发送的json
【发布时间】:2023-04-08 00:50:01
【问题描述】:

我想检查我的 enqueue 调用中由改造发送的原始 json。这是我的点击事件的代码:

            public void onClick(View v) {
                ArrayList<Product> products = ((MenuAdapter)rvMenuProducts.getAdapter()).getOrderItens();
                ArrayList<Item> orderItemList = new ArrayList<Item>();
                for(Product p: products){
                    orderItemList.add(new Item(p));
                }
                EditText etCardNumber = (EditText) findViewById(R.id.et_card_number);
                String cardNumber = etCardNumber.getText().toString();

                if(GenericUtils.stringIsNotNullAndNotEmpty(cardNumber)){
                    NewOrder newOrder = new NewOrder(waiterId, establishmentId, cardNumber, orderItemList);

                    WaiterRequester.addOrder(newOrder, new Callback<AddOrderResultInfo>() {
                        @Override
                        public void onResponse(Call<AddOrderResultInfo> call, Response<AddOrderResultInfo> response) {
                            int a = 5;

                            Toast.makeText(context, "Pedido realizado com sucesso", Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onFailure(Call<AddOrderResultInfo> call, Throwable t) {
                            int b = 5;

                            Toast.makeText(context, "VISH", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
                else{
                    etCardNumber.setError("ERROOOOOOO");
                }
            }

这就是我调用我的 API 的方式,我的 api 上出现了一些我不知道的异常,因为我的返回是一个布尔值,但是当我使用邮递员发送请求时,它可以工作!

这是邮递员发送的json:

{   
    "newOrder": 
    {
        "idWaiter" : 1,
        "idEstablishment": 6,
        "cardNumber": "123",
        "listItem": [{ "idProduct": 1, "quantity": 1 }]
    }
}

我的班级 NewOrder 在哪里:

public class NewOrder {

    public int idWaiter;
    public long idEstablishment;
    public String cardNumber;
    public ArrayList<Item> listItem;

    public NewOrder() {
    }

    public NewOrder(int idWaiter, long idEstablishment, String cardNumber, ArrayList<Item> listItem) {
        this.idWaiter = idWaiter;
        this.idEstablishment = idEstablishment;
        this.cardNumber = cardNumber;
        this.listItem = listItem;
    }

    public int getIdWaiter() {
        return idWaiter;
    }

    public void setIdWaiter(int idWaiter) {
        this.idWaiter = idWaiter;
    }

    public long getIdEstablishment() {
        return idEstablishment;
    }

    public void setIdEstablishment(long idEstablishment) {
        this.idEstablishment = idEstablishment;
    }

    public String getCardNumber() {
        return cardNumber;
    }

    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    public ArrayList<Item> getListItem() {
        return listItem;
    }

    public void setListItem(ArrayList<Item> listItem) {
        this.listItem = listItem;
    }
}

和项目:

public class Item {

    public long idProduct;
    public int quantity;

    public Item() {
    }

    public Item(Product p) {
        this.setQuantity(p.getQuantity());
        this.setIdProduct(p.getIdProduct());
    }

    public Item(int idProduct, int quantity) {
        this.idProduct = idProduct;
        this.quantity = quantity;
    }

    public long getIdProduct() {
        return idProduct;
    }

    public void setIdProduct(long idProduct) {
        this.idProduct = idProduct;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

编辑:

这可能很有用,By Object 在后端作为空值到达。

【问题讨论】:

    标签: android json post retrofit


    【解决方案1】:

    在我看来,您正在使用 Retrofit 2,因此,您可以制作一个拦截器来记录您的所有请求。

    'com.squareup.okhttp3:logging-interceptor:3.2.0' 添加到您的依赖项并像这样构建您的OkHttpClient

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
    

    最后,将您的 OkHttpClient 添加到您的 Retrofit 对象中:

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

    【讨论】:

    • 如果你使用上面的代码,日志会自动打印到你的logcat中
    • 这里没有打印:/
    • 已编辑。现在应该修复,以防有人现在遇到这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多