【问题标题】:getInt() function returns wrong value in volley androidgetInt() 函数在 volley android 中返回错误值
【发布时间】:2021-12-20 00:21:40
【问题描述】:

这是一个我想从 API 获取数据的函数。其他值的所有值都是正确的,但有两个属性 1. already_enrolled 和 2. Liked,它们是整数,API 返回这两个属性的整数值。但是当我在 android 应用程序 getInt() 中的 java 代码中获取它们的值时,为对象返回 0。 以下是 API 的响应:

  {"subjects":[{"id":1,"name":"word","package_id":2,"created_at":"2021-06-21T00:00:00.000000Z","updated_at":"2021-11-06T06:06:02.000000Z","courses_count":1,"likes_count":0,"enrolled_count":0,"rates_count":0,"rate_sum":null,"liked":0,"already_enrolled":0,
        "level":{"id":1,"package_id":2,"subject_id":1,"sequence":0,"level":"Beginner","created_at":null,"updated_at":null}},
    {"id":4,"name":"PowerPoint\r\n","package_id":2,"created_at":"-000001-11-30T00:00:00.000000Z","updated_at":"2021-11-06T00:00:00.000000Z","courses_count":1,"likes_count":0,"enrolled_count":0,"rates_count":0,"rate_sum":null,"liked":0,"already_enrolled":0,
        "level":{"id":3,"package_id":2,"subject_id":4,"sequence":2,"level":"0 to 100","created_at":null,"updated_at":null}},
    {"id":5,"name":"Excel","package_id":2,"created_at":"-000001-11-30T00:00:00.000000Z","updated_at":"2021-11-06T00:00:00.000000Z","courses_count":1,"likes_count":0,"enrolled_count":0,"rates_count":0,"rate_sum":null,"liked":0,"already_enrolled":0,
        "level":{"id":2,"package_id":2,"subject_id":5,"sequence":1,"level":"Intermediate","created_at":null,"updated_at":null}},
    {"id":8,"name":"Outlook","package_id":2,"created_at":"-000001-11-30T00:00:00.000000Z","updated_at":"2021-11-06T00:00:00.000000Z","courses_count":9,"likes_count":1,"enrolled_count":1,"rates_count":1,"rate_sum":2.5,"liked":1,"already_enrolled":1,
            "level":{"id":6,"package_id":2,"subject_id":8,"sequence":3,"level":"zero to hero","created_at":null,"updated_at":null}}
]} ```

for the last object already_enrolled and liked values are 1 but when I get its value in android it returns 0.
Here is my Java Code:
``` public void getSubjects(JSONObject object, final onSubjectRecieved subjectRecieved)
    {
        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, URL.getRootUrl() + "subjects",object, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                List<Subject> subjects = new ArrayList<>();
                try
                {
                    JSONArray sbjs = response.getJSONArray("subjects");
                    for(int i = 0; i< sbjs.length();i++)
                    {
                        Subject sbj = new Subject();
                        JSONObject obj = sbjs.getJSONObject(i);
                        sbj.setId(obj.getInt("id"));
                        Log.i("testtttts",obj.get("already_enrolled")+""+obj.getInt("id"));
                        sbj.setTitle(obj.getString("name"));
                        sbj.setPackage_id(obj.getInt("package_id"));
                        JSONObject level = obj.getJSONObject("level");
                        if(level != null)
                        {
                            sbj.setLevel(level.getString("level"));
                            sbj.setLevel_id(level.getInt("sequence"));
                        }
                        sbj.setVideos(obj.getInt("courses_count"));
                        sbj.setLikes(obj.getInt("likes_count"));
                        sbj.setEnrolleds(obj.getInt("enrolled_count"));
                        sbj.setRates(obj.getInt("rates_count"));
                        if(obj.getInt("rates_count") > 0)
                        {
                            sbj.setRate_sum(obj.getDouble("rate_sum"));
                        }else
                        {
                            sbj.setRate_sum(0);
                        }
                        subjects.add(sbj);
                    }
                    subjectRecieved.onRecieved(subjects);
                }catch(Exception e)
                {
                    subjectRecieved.onError(e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                subjectRecieved.onError(error.toString());
            }
        }){
            public Map<String, String> getHeaders() {
                Map<String, String> params = new HashMap<String, String>();
                SessionSharedPrefrence ssp = new SessionSharedPrefrence(context);
                params.put("Authorization", "Bearer " + ssp.getToken());
                return params;
            }
        };
        request.setRetryPolicy(new DefaultRetryPolicy(15000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        Volley.newRequestQueue(context).add(request);
    }

这是日志结果

I/testtttts: 01
    04
I/testtttts: 05
    08 ```

【问题讨论】:

    标签: android android-volley


    【解决方案1】:

    不要使用obj.get("already_enrolled"),而是使用obj.getInt("already_enrolled"),因为它是一个整数。

    在这一行

    Log.i("testtttts",obj.get("already_enrolled")+""+obj.getInt("id"));

    【讨论】:

    • 它也可以。我试过很多次了。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 2020-02-06
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多