【问题标题】:Android Retrofit 2 - problem with sending the Array<Object> using POSTAndroid Retrofit 2 - 使用 POST 发送 Array<Object> 的问题
【发布时间】:2021-01-13 19:23:22
【问题描述】:

我是翻新的新手,现在,当我知道如何发送没有任何对象的普通数据时,只需使用参数或简单的主体,我想知道如何发送对象...... 我花了大约 20 小时来调试它,我很困惑,因为我不知道该怎么做...... 有我的代码:

API 接口:

    @POST("/api/assortment")
    Call<PostAssortment> getAssortment(@Body String PostShipmentProgress);

PostAssortment 类:

public class PostAssortment {
    private String JSON;
    @SerializedName("token")
    @Expose
    private String token;
    @SerializedName("assortment")
    @Expose
    private Assortment assortment;
    @SerializedName("tokens")
    @Expose
    private List<String> tokens;
    @SerializedName("positions")
    @Expose
    private List<Position> positions;
    @SerializedName("deviceId")
    @Expose
    private String deviceId;

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public Shipment getAssortment() {
        return assortment;
    }

    public void setAssortment(Assortment assortment) {
        this.assortment = assortment;
    }

    public List<String> getTokens() {
        return tokens;
    }

    public void setTokens(List<String> tokens) {
        this.tokens = tokens;
    }

    public List<Position> getPositions() {
        return positions;
    }

    public void setPositions(List<Position> positions) {
        this.positions = positions;
    }

    public String getDeviceId() {
        return deviceId;
    }

    public void setDeviceId(String deviceId) {
        this.deviceId = deviceId;
    }

    public String getJSON() {
        return JSON;
    }

    public void setJSON(String JSON) {
        this.JSON = JSON;
    }

}

还有 mainJava 类:

Gson gson = new Gson();
PostAssortment postAssortment= new PostAssortment();
List<String> tokens = new ArrayList<>();
tokens.add("someToken");
postAssortment.setTokens(tokens);
postAssortment.setDeviceId("aaaaa");
List<Position> currentPosition = new ArrayList<>();
Position cp = new Position();
cp.setItemName("Some");
cp.setPlace("POLAND");
cp.setTimestamp("2020-12-09T11:00:00");
currentPosition.add(cp);
postAssortment.setPositions(currentPosition);

String postAssortmentJSON = gson.toJson(postAssortment);
                     Call<PostAssortment> call = ApiLoginInterface.getAssortment(postAssortmentJSON);

            call.enqueue(new Callback<PostAssortment>() {
                @Override
                public void onResponse(Call<PostAssortment> call, Response<PostAssortment> response) {
                    PostAssortment assortmentResponse = response.body();
    }

                @Override
                public void onFailure(Call<PostAssortment> call, Throwable t) {
                    Log.d("FAILURE", "onFailure: " + t.getMessage());
                }
            });
        }

还有我的 onCreate 改造:

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        String BASE_URL = getString(API_URL);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

        ApiLoginInterface = retrofit.create(ApiLoginInterface.class);

在我尝试调用它之后,我没有得到任何关于调用队列的点只是一个

Android: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

错误... 有人可以描述一下并帮助我使其工作吗? :/

【问题讨论】:

    标签: java android retrofit retrofit2


    【解决方案1】:

    您没有提供足够的信息来帮助识别错误。可能还会将完整的堆栈跟踪添加到问题中。但是,如果您的 API 发布请求需要一个 json 正文,我将从以下修复开始:

    删除这个:

    String postAssortmentJSON = gson.toJson(postAssortment);
    

    然后将您的对象作为 pojo 传递给您的改造界面,如下所示:

    @POST("/api/assortment")
    Call<PostAssortment> getAssortment(@Body PostAssortment postAssortment);
    

    然后在进行通话时,您无需将其转换为字符串 json 字符串。适配器会为您执行此操作:

    Call<PostAssortment> call = ApiLoginInterface.getAssortment(postAssortment);
    

    【讨论】:

    • 您需要哪些信息才能更好地了解它?
    【解决方案2】:

    在我的问题中发布分类将在一个列表中,因此为了使其正常工作,我需要将调用更改为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2017-02-02
      • 2020-05-26
      • 1970-01-01
      • 2017-05-30
      • 2016-08-11
      相关资源
      最近更新 更多