如何使用volley库android解析JSON

时间:2016-12-27 21:52:36

标签: android json android-volley

我使用Volley library解析了JSON响应,如this video中所做。但是我收到了一个错误。错误是:

  

E / VOLLEY:ERROR

是的,有人可以帮助我吗?我不知道问题是什么。

编辑:添加了代码

package com.example.hello.Project;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Activity1 extends Activity {

Button start;
TextView textView;
RequestQueue requestQueue;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);

start = (Button) findViewById(R.id.btn);
textView = (TextView) findViewById(R.id.textView2);
requestQueue = Volley.newRequestQueue(this);

start.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://example.com/abc.json",
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try {
                            JSONArray jsonArray = response.getJSONArray("abc");

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

                                JSONObject student = jsonArray.getJSONObject(i);

                                String a= student.getString("a");
                                String b= student.getString("b");
                                String c= student.getString("c");
                                String d= student.getString("d");

                                textView.append(a+" \n"+b+" \n"+c+" \n "+d+" \n");

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

                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("VOLLEY","ERROR");
                    }
                }


        );

        requestQueue.add(jsonObjectRequest);
    }
});
}
}

这是代码。

2 个答案:

答案 0 :(得分:1)

这不是解决问题的方法,但它会告诉你出了什么问题。

更改

new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("VOLLEY","ERROR");
                }
            }

new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("VOLLEY", error.toString());
                }
            }

这样它实际上会说出错误是什么,而不只是&#34;错误&#34;。

结论是样本JSON无效,因此无法正确读取。

答案 1 :(得分:0)

除了@TJ _的答案之外,您还需要在每个属性之间添加逗号。

你有(这是无效的):

{
  "buli1617sp": [
    {
      name: "Embolo"
      vereine: "Von Basel zu Schalke"
      geld: "29 Mio Euro"
      datum: "01.08.2016"
    },
    {
      name: "Coke"
      vereine: "Von Sevilla zu Schalke"
      geld: "4 Mio Euro"
      datum: "02.08.2016"
    },
    {
      name: "Bentaleb"
      vereine: "Von Basel zu Schalke"
      geld: "Leihe mit Kaufoption über 19 Mio Euro"
      datum: "03.08.2016"
    }
  ]
}

正确的JSON:

{
  "buli1617sp": [
    {
      "name": "Embolo",
      "vereine": "Von Basel zu Schalke",
      "geld": "29 Mio Euro",
      "datum": "01.08.2016"
    },
    {
      "name": "Coke",
      "vereine": "Von Sevilla zu Schalke",
      "geld": "4 Mio Euro",
      "datum": "02.08.2016"
    },
    {
      "name": "Bentaleb",
      "vereine": "Von Basel zu Schalke",
      "geld": "Leihe mit Kaufoption über 19 Mio Euro",
      "datum": "03.08.2016"
    }
  ]
}

使用JSON时,我建议使用在线JSON解析器(例如this)来验证JSON格式是否正确。