响应不是来自使用2的服务器

h22fl7wq  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(346)

嗨,在下面的代码中,我有一个get方法,该方法使用reform库解析json响应。
对于下面的质询类,通过pojo类解析json响应,但响应不是来自服务器。
请任何一个人帮助解决这个问题回答:

{
        success: true,
        result: {
                token: TOKENSTRING,    // Challenge token to be used for login.
                serverTime: TIMESTAMP, // Current Server time
                expireTime: TIMESTAMP  // Time when token expires
        }
}

获取挑战.java:

private void getchallenge() {

        //Here a logging interceptor is created
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);

        //The logging interceptor will be added to the http client
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.addInterceptor(logging);

        final GetNoticeDataService service = RetrofitInstance.getRetrofitInstance().create(GetNoticeDataService.class);

        /**Call the method with parameter in the interface to get the notice data*/
        Call<ManageChallenge> call = service.getChallengeList();

        /**Log the URL called*/
        Log.wtf("URL Called", call.request().url() + "");

        call.enqueue(new Callback<ManageChallenge>() {
            @Override
            public void onResponse(Call<ManageChallenge> call, Response<ManageChallenge> response) {
                if(response.isSuccessful() ) {

                    ManageChallenge challenge=response.body();

                   // String response1=response.body().toString();
                    String success=challenge.getSuccess().toString();

                    if(success.equals("true")){
                        String result= challenge.getResult().toString();

                        try {
                            JSONObject jsonObject =new JSONObject(result);

                            String token = jsonObject.getString("token");
                            Log.i("token", "token" + token);
                            String serverTime =jsonObject.getString("serverTime");
                            Log.i("serverTime", "serverTime" + serverTime);
                            String expireTime =jsonObject.getString("expireTime");
                            Log.i("expireTime", "expireTime" + expireTime);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    Log.i("REsult", "Get submitted to API." + challenge);

                }
            }

            @Override
            public void onFailure(Call<ManageChallenge> call, Throwable t) {
                Toast.makeText(LoginActivity.this, "Something went wrong...Error message: " + t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
}

java示例:

public class RetrofitInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "http://XXXXXXXXXXXX/";

    /**
     * Create an instance of Retrofit object
     * */
    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {
            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

getnoticedataservice.java文件:

public interface GetNoticeDataService {

        @Headers("Content-Type: application/json")
        @GET("webservice.php?operation=getchallenge&username=admin")
        Call<ManageChallenge> getChallengeList();
    }

managechallenge.java文件:

public class ManageChallenge {

    @SerializedName("success")
    private String success;

    @SerializedName("result")
    private List <getChallengeList> result;

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public List<getChallengeList> getResult() {
        return result;
    }

    public void setResult(List<getChallengeList> result) {
        this.result = result;
    }
}

getchallengelist.java:获取挑战列表:

public class getChallengeList {

        @SerializedName("token")
        @Expose
        private String token;
        @SerializedName("serverTime")
        @Expose
        private String serverTime;
        @SerializedName("expireTime")
        @Expose
        private String expireTime;

        public String getToken() {
            return token;
        }

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

        public String getServerTime() {
            return serverTime;
        }

        public void setServerTime(String serverTime) {
            this.serverTime = serverTime;
        }

        public String getExpireTime() {
            return expireTime;
        }

        public void setExpireTime(String expireTime) {
            this.expireTime = expireTime;
        }
    public getChallengeList(String tokens, String expireTimes, String serverTimes){
        token = tokens;
        expireTime = expireTimes;
        serverTime = serverTimes;
    }

}

Postman 回复:

{"success":true,"result":{"token":"5e2ab99eb318f","serverTime":1579858334,"expireTime":1579858634}}
yx2lnoni

yx2lnoni1#

在postman响应中,“result”返回一个json对象,但是在managechallenge.java中。将结果声明为对象列表。所以我认为这可能会导致一些错误的铸造。
你应该在第一个字符处用大写字母声明你的类名。如果没有,将来可能会引起一些混乱。
第2页。对不起,我的英语水平太差了。

nhaq1z21

nhaq1z212#

我不明白这一点,您使用的是refrofit并使用json对象获取响应,您可以直接将模型调用传递到refrofit中,然后使用模型调用轻松地获取数据。responce.body().challenge().getresult().tostring()

ndh0cuux

ndh0cuux3#

根据你的答复,这里没有关于这个问题的清单

@SerializedName("result")
private List<GetChallengeList> result;

换成这样

public class ManageChallenge {

    @SerializedName("success")
    private String success;

    @SerializedName("result")
    private GetChallengeList result;

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public GetChallengeList getResult() {
        return result;
    }

    public void setResult(GetChallengeList result) {
        this.result = result;
    }
}

getchallengelist类

public class GetChallengeList {

    @SerializedName("token")
    @Expose
    private String token;
    @SerializedName("serverTime")
    @Expose
    private String serverTime;
    @SerializedName("expireTime")
    @Expose
    private String expireTime;

    public String getToken() {
        return token;
    }

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

    public String getServerTime() {
        return serverTime;
    }

    public void setServerTime(String serverTime) {
        this.serverTime = serverTime;
    }

    public String getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(String expireTime) {
        this.expireTime = expireTime;
    }

    public GetChallengeList(String tokens, String expireTimes, String serverTimes){
        token = tokens;
        expireTime = expireTimes;
        serverTime = serverTimes;
    }
}

相关问题