【问题标题】:Cant get data from JSON array with android-volley into custom listview无法使用 android-volley 从 JSON 数组中获取数据到自定义列表视图中
【发布时间】:2019-07-31 10:55:15
【问题描述】:

根据我的最后一个问题: Creating Json file with C# of mysql data 我试图从创建的 JSON url/文件中获取数据,但它只是不加载请求的页面,并且在 android 模拟器上没有给出任何错误。 这是我的 Volley 代码:

  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.studentss);
    allstudents=new ArrayList<>();
    student_lists=findViewById(R.id.students_listview);

    postClass=new PostClass(allstudents,this);
    student_lists.setAdapter(postClass);
    mQueue=Volley.newRequestQueue(this);     

    jsonParse()

    private void jsonParse(){
    String url=".......WebForm1.aspx";
    JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, 
    url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
      JSONArray jsonArray=response.getJSONArray("Students");
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject stu =jsonArray.getJSONObject(i);
                            String stuName=stu.getString("firstname");

                            allstudents.add(stuName);

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
             error.printStackTrace();
        }
    });
    mQueue.add(request);

}

如果你能告诉我我的错,我将不胜感激。我认为问题与 android 而不是 json 有关,因为 我可以获取数据但不能显示它!

【问题讨论】:

    标签: android json android-volley


    【解决方案1】:

    onResponse() 内得到响应后,你需要用更新的数据设置你的listView。

    将此代码添加到onResponse()

    postClass=new PostClass(allstudents,this);
    student_lists.setAdapter(postClass); or  postClass.notifyDataSetChanged();
    

    这样做 -

        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response . getJSONArray ("Students");
                for (int i = 0;i < jsonArray.length();i++){
                    JSONObject stu = jsonArray . getJSONObject (i);
                    String stuName = stu . getString ("firstname");
    
                    allstudents.add(stuName);
                }
    
           postClass=new PostClass(allstudents,this);//THİS LİNE GIVES AN ERROR LIKE THIS BUT ONLY USING THE NEXT LINE WOULD BE EFFICIENT AND ALSO SOLVE THE PROBLEM JUST WANTED TO EDIT
    

    :postClass (数组列表, android.app.Activity) 在 PostClass 中无法应用 到 (数组列表, 匿名 com.android.volley.Response.Listener)"

            postClass.notifyDataSetChanged();//THIS LINE IS ENOUGH 
            } catch (JSONException e) {
                e.printStackTrace();
            }
    

    【讨论】:

    • @jacob 希望这个答案能完全解决你的问题,欢迎接受这个答案
    • 非常感谢,这也是一个解决方案,我在您发布此内容的同时找到了另一种方法:)但我会接受您的答案:)
    • 在您的回答中,您在 for 循环中通知适配器,这不是一个好习惯,我将代码更新为您喜欢的解决方案,首先将所有学生添加到数组列表中,然后通知适配器,这将是有效的: )
    【解决方案2】:

    您必须检查以下几点: 1-“学生”是您的 Json 中的正确名称,而不是“学生”。 2-JSON结果Object->Array->Object的结构。

    我个人更喜欢使用 GSON,因为它可以自动转换而无需手动循环。

    【讨论】:

    • 对不起,我在这里写错了,但在我的代码中,它和你说的一样,我会尝试 gson,谢谢,但我认为使用“getString”方法应该可以解决你提到的问题?
    • 不,没有对不起
    【解决方案3】:

    我通过添加解决了这个问题:

     allstudents.add(stuName);
     postClass.notifyDataSetChanged(); //THİS LİNE SOLVED İT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2014-02-16
      • 1970-01-01
      • 2015-12-31
      • 2019-03-19
      • 2017-05-16
      相关资源
      最近更新 更多