【问题标题】:Parse JSON array data in android using Volley使用 Volley 在 android 中解析 JSON 数组数据
【发布时间】:2018-05-29 09:12:50
【问题描述】:

JSON 数据格式: 我正在尝试获取这个数组 json 数据但没有得到它。

[{"Items":"Chicken Burger","Price":"250","Quantity":"2"}, 
{"Items":"Hamburger","Price":"230","Quantity":"3"}]

MyCartActivity 类: 我尝试使用 Volley,现在我得到 JSONArray 无法转换为 JSONObject 错误。您能否提及在哪里进行更改以便我可以获取我的数据?

 final JsonObjectRequest request = new JsonObjectRequest (Request.Method.POST, fetchurl, null, new  Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {

                JSONArray jsonArray = response.getJSONArray("");

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

                    JSONObject object = jsonArray.getJSONObject(i);

                    String Price = object.getString("Price");
                    String Name = object.getString("Items");
                    String Quantity = object.getString("Quantity");

                    adapter = new CartAdapter(MyCartActivity.this, list);
                    list.add(new CartPojo(Price, Name, Quantity));
                    adapter.notifyDataSetChanged();

                    progressbar.setVisibility(View.GONE);
                }

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

     requestQueue.add(request);
  }

适配器类:

    public CartAdapter(Activity activity, List datalist) {

    this.activity = activity;
    this.datalist = datalist;
   }

   @Override
   public int getCount() {
   return datalist.size();
  }

  @Override
  public Object getItem(int position) {
    return datalist.get(position);
 }

  @Override
  public long getItemId(int position) {
    return position;
 }

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

    if (inflater == null)
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null)
        convertView = inflater.inflate(R.layout.cart_item_layout, null);

    TextView ItemName = convertView.findViewById(R.id.item_name);
    TextView Price = convertView.findViewById(R.id.item_price);
    TextView Quantity = convertView.findViewById(R.id.items_quantity);

    CartPojo pojo = datalist.get(position);

    ItemName.setText(String.valueOf(pojo.getName()));
    Price.setText(String.valueOf(pojo.getPrice()));
    Quantity.setText(String.valueOf(pojo.getQuantity()));

    return convertView;
  }

请给我一些解决方案....

【问题讨论】:

    标签: android-volley android-json


    【解决方案1】:

    无法将响应解析为JSONObject,因为它不是那个,而是JSONArray。您可以发送一个简单的StringRequest,然后使用JSONArray(response) 构造函数将响应字符串解析为JSONArray

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            JSONArray arr = new JSONArray(response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
    
        }
    });
    

    或使用JsonArrayRequestHere's 一个例子。

    【讨论】:

    • 谢谢@Andrej,我会用这个检查一下
    • 我已将 JsonObjectRequest 更改为 StringRequest 正如您提到的那样,但获取数据的过程仍然没有更改。它显示帧被跳过......这背后的原因是什么......
    • 我是否也必须对 Adpater 类进行一些更改?请让我知道我应该在哪里进行这些更改....
    • 帧被跳过,因为你在主线程上做了太多的处理。看看 Android 中的线程。您是否收到带有 stringRequest 的响应?
    • 不,我没有收到任何回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多