我正在开发一个在线广播应用程序演示。我需要从互联网上获取一些数据,如电台的名称和口号,我看了一些关于如何使用凌空来解析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
当我运行此代码时,我的文本仍然保持不变
答案 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对象...
我希望它可以帮助你:)