如何修复翻新中的预期BEGIN_OBJECT?

时间:2018-10-21 14:10:06

标签: java android retrofit2

在我的应用程序中,我想使用 Retrofit 从服务器获取一些数据。
我在下面编写代码,但是在运行应用程序并调用api时,在错误:

下面显示给我
E/socketLogResponse: Err : com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

请参阅我上面的代码并为我提供帮助

服务器的API响应:

{
    "status": "ok",
    "time": 0.014972925186157227
}

ApiService界面:

@POST("api/log")
    Call<SocketPingResponse> getSocketPingLog(@Header("jwt") String jwt, @Body SocketPingBodySendData socketPingBodySendData);

SocketPingResponse类:

public class SocketPingResponse {
    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("time")
    @Expose
    private Double time;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Double getTime() {
        return time;
    }

    public void setTime(Double time) {
        this.time = time;
    }
}

SocketPingBodySendData类:

public class SocketPingBodySendData {
    @SerializedName("auction_id")
    @Expose
    int auction_id;
    @SerializedName("data")
    @Expose
    List<SocketPingEntity> data;

    public int getAuction_id() {
        return auction_id;
    }

    public void setAuction_id(int auction_id) {
        this.auction_id = auction_id;
    }

    public List<SocketPingEntity> getData() {
        return data;
    }

    public void setData(List<SocketPingEntity> data) {
        this.data = data;
    }
}
活动中的

Api呼叫代码:

pingEntityList.addAll(socketPingDatabase.socketPingDao().getSocketPingEntityList());
                        SocketPingBodySendData pingBodySendData = new SocketPingBodySendData();
                        pingBodySendData.setAuction_id(auctionID);
                        pingBodySendData.setData(pingEntityList);
                        Toast.makeText(context, ""+pingEntityList.size(), Toast.LENGTH_SHORT).show();
                        Call<SocketPingResponse> pingResponseCall = apis.getSocketPingLog(jwtToken, pingBodySendData);
                        pingResponseCall.enqueue(new Callback<SocketPingResponse>() {
                            @Override
                            public void onResponse(Call<SocketPingResponse> call, Response<SocketPingResponse> response) {
                                    if (response.body() != null) {
                                        Toast.makeText(context, response.body().getStatus(), Toast.LENGTH_SHORT).show();
                                        if (response.body().getStatus().equals("ok")) {
                                            pingEntityList.clear();
                                            socketPingDatabase.socketPingDao().deleteAll();
                                        }
                                    }
                            }

                            @Override
                            public void onFailure(Call<SocketPingResponse> call, Throwable t) {
                                Log.e("socketLogResponse", "Err : " + t.toString());
                            }
                        });

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

在构建api服务接口之前,您需要添加gsonconverter工厂。

    function getArrowFunctionBody(f) {
      const matches = f.toString().match(/^(?:\s*\(?(?:\s*\w*\s*,?\s*)*\)?\s*?=>\s*){?([\s\S]*)}?$/);
      if (!matches) {
        return null;
      }
      
      const firstPass = matches[1];
      
      // Needed because the RegExp doesn't handle the last '}'.
      const secondPass =
        (firstPass.match(/{/g) || []).length === (firstPass.match(/}/g) || []).length - 1 ?
          firstPass.slice(0, firstPass.lastIndexOf('}')) :
          firstPass
      
      return secondPass;
    }
    
    const K = (x) => (y) => x;
    const I = (x) => (x);
    const V = (x) => (y) => (z) => z(x)(y);
    const f = (a, b) => {
      const c = a + b;
      return c;
    };
    const empty = () => { return undefined; };
    console.log(getArrowFunctionBody(K));
    console.log(getArrowFunctionBody(I));
    console.log(getArrowFunctionBody(V));
    console.log(getArrowFunctionBody(f));
    console.log(getArrowFunctionBody(empty));