【问题标题】:Not Able to Show the JSON Data in ListView?无法在 ListView 中显示 JSON 数据?
【发布时间】:2017-03-14 09:40:30
【问题描述】:

我无法使用 Volley 库在 ListView 中显示 JSON 数据。

收费等级

public class Fee extends Fragment /*implements View.OnClickListener   */ {

    LinearLayout receipt1, receipt2, receipt3, receipt4;
    LinearLayout receipt1detail, receipt2detail, receipt3detail, receipt4detail;


    TextView statustextView;

    ListView listView;
    List<StudentFeeInformation> yourData = new ArrayList<StudentFeeInformation>();
    public static final String Navigation_URL = "http://192.168.100.5:84/Api/financeApi/getAllFees";
    //  public static final String Navigation_URL = "http://192.168.100.5:84/Api/financeApi/getAllFees?ID=111";
    String master_id;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.student_fees_listview, container, false);
        setHasOptionsMenu(true);
        //  receipt1 = (LinearLayout) view.findViewById(R.id.linear_receipt1_fee);
        //  receipt2 = (LinearLayout) view.findViewById(R.id.linear_receipt2_fee);
        //  receipt3 = (LinearLayout) view.findViewById(R.id.linear_receipt3_fee);
        //  receipt4 = (LinearLayout) view.findViewById(R.id.linear_receipt4_fee);

        //  receipt1detail = (LinearLayout) view.findViewById(R.id.receipt1_fee);
        //  receipt2detail = (LinearLayout) view.findViewById(R.id.receipt2_fee);
        //  receipt3detail = (LinearLayout) view.findViewById(R.id.receipt3_fee);
        //  receipt4detail = (LinearLayout) view.findViewById(R.id.receipt4_fee);

        //   receipt1.setOnClickListener(this);
        //   receipt2.setOnClickListener(this);
        //   receipt3.setOnClickListener(this);
        //   receipt4.setOnClickListener(this);


        //   receipt1detail.setVisibility(View.VISIBLE);
        //   receipt2detail.setVisibility(View.GONE);
        //   receipt3detail.setVisibility(View.GONE);
        //   receipt4detail.setVisibility(View.GONE);

        statustextView = (TextView) view.findViewById(R.id.student_profile_fee_status);


        SessionManagement sessionManagement = new SessionManagement(getContext());
        master_id = sessionManagement.getMasterId();

        listView = (ListView) view.findViewById(R.id.list_student_fees);
        CustomFeeListStudentAdapter customFeeListStudentAdapter = new CustomFeeListStudentAdapter(getContext(), R.layout.fragment_fee, yourData);
        listView.setAdapter(customFeeListStudentAdapter);


        getUsersListData();

        return view;
    }


    StudentFeeInformation studentFeeInformation;


    private void getUsersListData() {
        String URL = Navigation_URL + "?id=" + master_id;
        StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {

                            JSONArray jArray = new JSONArray(response);
                            studentFeeInformation = new StudentFeeInformation();
                            for (int i = 0; i < jArray.length(); i++) {

                                JSONObject jsonObject = jArray.getJSONObject(i);
                                studentFeeInformation.Status = jsonObject.getString("Status");
                                System.out.println("This is Good");
                                System.out.print(studentFeeInformation.Status);
                            }


                        } catch (JSONException e) {

                            System.out.println("This is not good");

                            e.printStackTrace();

                        }

                    }

                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // Toast.makeText(view.Fee.this, error.toString(), Toast.LENGTH_LONG).show();

            }
        }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<String, String>();
                return headers;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getContext());
        requestQueue.add(stringRequest);


    }
  }

StudentFeeInformation

public class StudentFeeInformation implements Serializable {
    public String Status;

    public String getStatus() {
        return Status;
    }

    public void setStatus(String status) {
        Status = status;
    }
}

CustomFeeListStudentAdapter

public class CustomFeeListStudentAdapter extends ArrayAdapter<StudentFeeInformation> {

    private List<StudentFeeInformation> items;

    public CustomFeeListStudentAdapter(Context context, int resource) {
        super(context, resource);
    }

    public CustomFeeListStudentAdapter(Context context, int resource, List<StudentFeeInformation> items) {
        super(context, resource, items);
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;

        TextView tt = null;


        if (v == null) {
            LayoutInflater vi;
            vi = LayoutInflater.from(getContext());
            v = vi.inflate(R.layout.fragment_fee, null);

            tt = (TextView) v.findViewById(R.id.student_profile_fee_status);

        }

        StudentFeeInformation p = items.get(position);

        if (p != null) {

            if (tt != null) {
                tt.setText("" + p.getStatus());
            }

        }


        return v;

    }


}

student_fees_listview

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#2E353D"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="30dp"
                android:layout_height="match_parent"
                android:padding="3dp"
                android:src="@mipmap/fee" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="8dp"
                android:text="Fees"
                android:textColor="#fff"
                android:textSize="17dp"
                android:textStyle="bold" />

        </LinearLayout>
    </LinearLayout>


    <ListView
        android:id="@+id/list_student_fees"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />


</LinearLayout>

fragment_fee

  <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:background="#DCE2E8"
                            android:orientation="horizontal"
                            android:padding="5dp">

                            <TextView
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:paddingLeft="70dp"
                                android:text="Status"
                                android:textSize="10dp"
                                android:textStyle="bold" />

                            <TextView
                                android:id="@+id/student_profile_fee_status"
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:layout_weight="1"
                                android:paddingLeft="70dp"
                                android:text="Paid"
                                android:textColor="#108B89"
                                android:textSize="10dp"
                                android:textStyle="bold" />

                        </LinearLayout>

JSON

[
  {
    "MasterID": "E0017",
    "StdID": 111,
    "Status": "P",
    "AmountPaid": 6645,
    "Class": 8,
    "DateOfReciept": "2017-01-01T00:00:00",
    "Description": "[{\"des\":\"Admission\",\"Amount\":300},{\"des\":\"Monthly Fee\",\"Amount\":5400},{\"des\":\"Exam Fee\",\"Amount\":200},{\"des\":\"Extra Charge\",\"Amount\":400},{\"des\":\"Late Charge\",\"Amount\":345}]",
    "RecieptNo": 1011,
    "NAME": "Uzumaki Naruto",
    "recivedDate": "2017-03-10T00:00:00",
    "reciever": "Cynthia Irwin"
  },
  {
    "MasterID": "E0017",
    "StdID": 111,
    "Status": "U",
    "AmountPaid": 5600,
    "Class": 8,
    "DateOfReciept": "2017-03-01T00:00:00",
    "Description": "[{\"des\":\"Exam Fee\",\"Amount\":200},{\"des\":\"Monthly Fee\",\"Amount\":5400}]",
    "RecieptNo": 1012,
    "NAME": "Uzumaki Naruto",
    "recivedDate": "2017-03-06T00:00:00",
    "reciever": "Cynthia Irwin"
  }
]

如何用 JSON 数据填充 listView?请告诉我 我在哪里做错了。

【问题讨论】:

    标签: android listview android-volley


    【解决方案1】:

    费用等级

        public class Fee extends Fragment /*implements View.OnClickListener   */ {
    
            LinearLayout receipt1, receipt2, receipt3, receipt4;
            LinearLayout receipt1detail, receipt2detail, receipt3detail, receipt4detail;
    
    
            TextView statustextView;
    
            ListView listView;
            List<StudentFeeInformation> yourData = new ArrayList<StudentFeeInformation>();
            public static final String Navigation_URL = "http://192.168.100.5:84/Api/financeApi/getAllFees";
            //  public static final String Navigation_URL = "http://192.168.100.5:84/Api/financeApi/getAllFees?ID=111";
            String master_id;
            StudentFeeInformation studentFeeInformation;
    
    
            @Nullable
            @Override
            public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
                View view = inflater.inflate(R.layout.student_fees_listview, container, false);
                setHasOptionsMenu(true);
    
                statustextView = (TextView) view.findViewById(R.id.student_profile_fee_status);
    
    
                SessionManagement sessionManagement = new SessionManagement(getContext());
                master_id = sessionManagement.getMasterId();
    
                listView = (ListView) view.findViewById(R.id.list_student_fees);
                //CustomFeeListStudentAdapter customFeeListStudentAdapter = new CustomFeeListStudentAdapter(getContext(), R.layout.fragment_fee, yourData);
                //listView.setAdapter(customFeeListStudentAdapter);
    
    
                getUsersListData();
    
                return view;
            }
    
            private void getUsersListData() {
                String URL = Navigation_URL + "?id=" + master_id;
                StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                try {
    
                                    ArrayList<StudentFeeInformation> student_list=new ArrayList<>();
                                    JSONArray jArray = new JSONArray(response);
    
                                    for (int i = 0; i < jArray.length(); i++) {
    
                                        JSONObject jsonObject = jArray.getJSONObject(i);
                                        String status = jsonObject.getString("Status");
                                        System.out.println("status:"+status);
                                        student_list.add(new StudentFeeInformation(status));
                                    }
    
                                    System.out.println("student_list size:"+student_list.size());
                                    CustomFeeListStudentAdapter customFeeListStudentAdapter = new CustomFeeListStudentAdapter(getActivity(),  student_list);
                                    listView.setAdapter(customFeeListStudentAdapter);
                                } catch (JSONException e) {
                                    System.out.println("This is not good");
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Toast.makeText(view.Fee.this, error.toString(), Toast.LENGTH_LONG).show();
    
                    }
                }) {
    
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        Map<String, String> headers = new HashMap<String, String>();
                        return headers;
                    }
    
                };
    
                RequestQueue requestQueue = Volley.newRequestQueue(getContext());
                requestQueue.add(stringRequest);
            }
          }
    

    StudentFeeInformation 模型类:

        public class StudentFeeInformation implements Serializable {
            public String Status;
    
    
            public StudentFeeInformation(String status) {
                Status = status;
            }
    
            public String getStatus() {
                return Status;
            }
    
            public void setStatus(String status) {
                Status = status;
            }
        }
    

    CustomFeeListStudentAdapter:

        public class CustomFeeListStudentAdapter extends BaseAdapter {
    
            Context mContext;
    
            ArrayList<StudentFeeInformation>student_list;
            String TAG="HomeTab_adapter";
            public CustomFeeListStudentAdapter(Context mContext, ArrayList<StudentFeeInformation> student_list) {
                super();
                this.mContext = mContext;
                this.student_list=student_list;
            }
    
            @Override
            public int getCount() {
                return student_list.size();
            }
    
            @Override
            public Object getItem(int arg0) {
                return arg0;
            }
    
            @Override
            public long getItemId(int arg0) {
                return arg0;
            }
    
            @Override
            public View getView(final int postion, View convertView, ViewGroup parent) 
            {
                final Holder viewHolder;
                if(convertView==null)
                {
                    // inflate the layout
                    LayoutInflater inflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView=inflater.inflate(R.layout.R.layout.fragment_fee, parent, false);
    
                    // well set up the ViewHolder
                    viewHolder = new Holder();
                    viewHolder.student_profile_fee_status = (TextView)convertView.findViewById(R.id.student_profile_fee_status);
    
                }
                else{
                    // we've just avoided calling findViewById() on resource everytime
                    // just use the viewHolder
                    viewHolder = (Holder) convertView.getTag();
                }
    
                viewHolder.student_profile_fee_status.setText(student_list.get(postion).getStatus());
    
    
                convertView.setTag(viewHolder);
                return convertView;
            }
    
            class Holder{
                TextView student_profile_fee_status;
    
            }
        }
    

    【讨论】:

    • 这个 studentFeeInformation 的参数应该是什么 = new StudentFeeInformation(需要参数);
    • @seon 删除那句话..不需要..检查更新的代码
    • 我在 Logcat 上获得了价值,但该价值没有显示在视图中
    • 检查给定的代码...将值添加到列表中,如下所示:student_list.add(new StudentFeeInformation(status));然后设置适配器
    • 解析后调用CustomFeeListStudentAdapter customFeeListStudentAdapter = new CustomFeeListStudentAdapter(getActivity(), student_list); listView.setAdapter(customFeeListStudentAdapter);
    【解决方案2】:

    您似乎错过了将studentFeeInformation 添加到yourData 列表中。将创建的studentFeeInformation添加到getUsersListData()中,for循环完成后,调用适配器的notifyDataSetChanged()

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多