首页 > 解决方案 > 凌空请求处理后做一些事情

问题描述

我正在使用 Volley 解析嵌套的 JSON 对象,我从 stackoverflow 本身得到了答案。

使用 Volley 解析嵌套的 JSON 对象

但我认为代码可以在没有 if else 的情况下进行优化,如果 volley 请求为空或未收到数据,我还必须显示文本“No Data”。我试图检查使用adapter.isEmptyadapter.getCount()

都没有奏效。

这是我的代码

datalist=false;
      progressBar.setVisibility(View.VISIBLE);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, JSON_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        schemeslist=false;
                        progressBar.setVisibility(View.INVISIBLE);



                        try {

                            JSONObject obj = new JSONObject(response);
                            JSONObject one = obj.getJSONObject("getProjectDetailsResult");
                            JSONObject two = one.getJSONObject("NewDataSet");

                            if(two.get("Rec") instanceof JSONArray) {
                                datalist=true;
                                JSONArray heroArray = two.getJSONArray("Rec");

                                for (int i = 0; i < heroArray.length(); i++) {

                                    JSONObject heroObject = heroArray.getJSONObject(i);

                                    APIModel hero = new APIModel(heroObject.getString("decProjectID"),
                                            heroObject.getString("intProjectSlNo"),
                                            heroObject.getString("chvProjectName"),
                                            heroObject.getString("chvProjectNameEng"),
                                            heroObject.getString("chrProjCatCode"),
                                            heroObject.getString("chvEngProjCategory"),
                                            heroObject.getString("nchvSecType"),
                                            heroObject.getString("chvEngSecType"),
                                            heroObject.getString("chvImplOfficerDesg"),
                                            heroObject.getString("chvImplOfficerDesgEng"),
                                            heroObject.getString("singleYrAmt"),
                                            heroObject.getString("TotExp"),
                                            heroObject.getString("percentage"));

                                    heroList.add(hero);

                                }
                            } else {
                                datalist=true;
                                JSONObject heroObject = two.getJSONObject("Rec");
                                APIModel hero = new APIModel(heroObject.getString("decProjectID"),
                                        heroObject.getString("intProjectSlNo"),
                                        heroObject.getString("chvProjectName"),
                                        heroObject.getString("chvProjectNameEng"),
                                        heroObject.getString("chrProjCatCode"),
                                        heroObject.getString("chvEngProjCategory"),
                                        heroObject.getString("nchvSecType"),
                                        heroObject.getString("chvEngSecType"),
                                        heroObject.getString("chvImplOfficerDesg"),
                                        heroObject.getString("chvImplOfficerDesgEng"),
                                        heroObject.getString("singleYrAmt"),
                                        heroObject.getString("TotExp"),
                                        heroObject.getString("percentage"));

                                heroList.add(hero);

                            }


                            ListViewAdapter adapter = new ListViewAdapter(heroList, getApplicationContext());

//adding the adapter to listview

                            listView.setAdapter(adapter);
                           // Toast.makeText(getApplicationContext(), " " + listView.getAdapter().getCount(),Toast.LENGTH_SHORT).show();
                            if(!datalist){
            txtNoData.setVisibility(View.VISIBLE);
        }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
//displaying the error in toast if occurrs
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

//creating a request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

//adding the string request to request queue
        requestQueue.add(stringRequest);

谁能告诉我应该在哪里设置 if 条件?我检查了一个 toast 以获取项目计数,但如果没有数据,它显示为空白而不是 0。所以我无法检查

标签: androidparsingandroid-listviewandroid-volleyandroid-adapter

解决方案


你可以查 size()data list(heroList)size()就是zero你有的no data

尝试这个

if(heroList.size() == 0){
     txtNoData.setVisibility(View.VISIBLE);
}

推荐阅读