首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截击JsonObjectRequest响应

截击JsonObjectRequest响应
EN

Stack Overflow用户
提问于 2018-09-26 02:31:11
回答 3查看 5.2K关注 0票数 1

为了实现这一点,我使用Volley JSONObjectRequest从服务器上通过JSON检索数据。在获得JSON响应之后,我希望将它保存到一个变量中,并通过活动使用它。下面是我的代码示例:

代码语言:javascript
复制
private String description;
private int status;
private boolean validateIntegrationCode() {
    if (checkNetwork()) {
        String url = "sample url";

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    status = response.getInt("status");// ** STATUS IS 1 HERE **
                    description = response.getString("description");

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);
    } else {
        // No network, check from SQLite
    }
    if (status == 1) { // ** STATUS IS 0 HERE **
        return true;
    } else {
        return false;
    }
}

当我在返回truefalse之前检查true值时,status的值现在是0,description也返回null

我的JSON回复:

代码语言:javascript
复制
{"status":1,"description":"Integration code is valid"}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-26 02:45:02

volley请求是一个异步调用。在收到响应之前,它不会阻止代码。因此,正在发生的是在收到截击响应之前检查if(status==1)。因此它是0。

你应该做的是:

1)使您的函数返回类型无效。

2)在onResponse中,将代码

代码语言:javascript
复制
if (status == 1) { // ** STATUS IS 0 HERE **
        statusBoolean = true;
    } else {
        statusBoolean = false;
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-26 02:52:04

我已将我的答复更新如下:

代码语言:javascript
复制
    private int status;
    private String description;

    private void callRequest() {

        // Initialize a new RequestQueue instance
        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);

        // Initialize a new JsonObjectRequest instance
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                Request.Method.GET,
                "URL",
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            status = response.getInt("status");// ** STATUS IS 1 HERE **
                            description = response.getString("description");

                            checkStatus();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                }
        );

        // Add JsonObjectRequest to the RequestQueue
        requestQueue.add(jsonObjectRequest);
    }

    private void checkStatus(){
        if(status == 1){
            // do what do you need to do id status == 1
        }else{
            // do what do you need to do id status == 0
        }
    }

试试这个,让我知道更新,谢谢!

票数 2
EN

Stack Overflow用户

发布于 2018-09-26 02:37:52

您应该将状态声明为int而不是String.。

代码语言:javascript
复制
private int status=0;

你可以试试这个方法

代码语言:javascript
复制
                status = response.getInt("status");
                description = response.getString("description");
                if (status == 1) { 
                 checkingStatus(status);
                } else {
                 checkingStatus(status);
                }

然后

代码语言:javascript
复制
public void checkingStatus(int status){
        if(status == 1){
            // do your code
        }else{
            // do your code
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52509120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档