如何使用齐射解析JSON文件

时间:2018-01-14 22:55:51

标签: android json android-volley android-json

我正在开发一个在线广播应用程序演示。我需要从互联网上获取一些数据,如电台的名称和口号,我看了一些关于如何使用凌空来解析JSON文件并从互联网上获取数据的教程,但我尝试了不同的方法,似乎没有什么要工作,这是一个简化的代码

CODE

public class MainActivity extends AppCompatActivity {
    TextView textView;
    RequestQueue requestQueue;


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

        requestQueue = Volley.newRequestQueue(getApplicationContext());

        textView =(TextView) findViewById(R.id.textView);



        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://api.myjson.com/bins/cd6dh", null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("1");
                            for (int i = 0; i <= jsonArray.length(); i++) {
                                JSONObject station = jsonArray.getJSONObject(i);
                                String stationname = station.getString("motto");
                                textView.append(stationname);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

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

                    }
                });

            requestQueue.add(jsonObjectRequest);

}

JSON网址 https://api.myjson.com/bins/cd6dh

当我运行此代码时,我的文本仍然保持不变

2 个答案:

答案 0 :(得分:1)

您的数据不是JSONObject而是JSONArray,因此您可以使用JSONArrayRequest中的Volley而不是JSONObjectRequest。你可能会在那里遇到一个例外,你正在捕捉它。获得JSONArray后,此行会为您提供第一站的电台

JSONObject station = jsonArray.getJSONObject(0).getJSONArray("1").getJSONObject(0);

station.getString("motto"); 

将为您提供车站的座右铭。

这是因为您的数据结构非常复杂。我建议让它更好更容易导航

这是请求的代码段应该是

  JsonArrayRequest jsonArrayRequest = new JsonArrayRequest("https://api.myjson.com/bins/cd6dh",
      new Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
          try {
            JSONObject station1 = response.getJSONObject(0).getJSONArray("1").getJSONObject(0);
            String stationName = station1.getString("motto");
          } catch (JSONException e) {
            e.printStackTrace();
          }
        }
      },
      new ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
          Log.e("volley", "error");
        }
      });
      requestQueue.add(jsonArrayRequest);

事实证明,除了错误的请求之外,您还没有分配过监听器。作为请求的第二个参数,它为null。

答案 1 :(得分:0)

你可以试试这个: -

Decodable

在这个地方

JSONArray jsonArray = new JSONArray(response+""); // string is the most general datatype
Log.d("MyApp",jsonArray+"");

此处 - JSONArray jsonArray = response.getJSONArray("1");

可以是

String stationname = station.getString("motto");

注意: - 您的json数组不好,因为您根据数字编制索引,它可能是数组中的直接json对象...

我希望它可以帮助你:)