android - 如何从 JSON 中提取数据?
问题描述
我正在调用一个 GET 请求到一个 API,它应该返回一个带有经度、纬度和地址的 JSON。
我正在尝试将地址放入 ArrayList 并将它们放入 Spinner。我成功地检索了整个 JSON,但是当我尝试只获取地址时,我收到了这个错误:
W/System.err: org.json.JSONException: Value 1 Chester Street, , , , ,
Coventry, West Midlands at 0 of type java.lang.String cannot be converted to
JSONObject
at org.json.JSON.typeMismatch(JSON.java:101)
W/System.err: at org.json.JSONArray.getJSONObject(JSONArray.java:525)
at com.example.vladu.carpark.LocationActivity$getJsonData.onPostExecute(LocationActivity.java:139)
at com.example.vladu.carpark.LocationActivity$getJsonData.onPostExecute(LocationActivity.java:93)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
导致问题的代码是:
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if (pd.isShowing()){
pd.dismiss();
}
try{
jsonObject = new JSONObject(response);
jsonArray = jsonObject.getJSONArray("addresses");
//jsonObject = jsonArray.getJSONObject(0);
for(int i = 0; i < jsonArray.length(); i++){
jsonObject = jsonArray.getJSONObject(i);
addresses.add(jsonObject.toString());
}
Spinner addressSpinner = (Spinner) findViewById(R.id.addressSpinner);
addressSpinner.setAdapter(new ArrayAdapter<String>(LocationActivity.this,
android.R.layout.simple_spinner_dropdown_item,addresses));
}catch(JSONException e){
e.printStackTrace();
}
}
}
编辑:这是我期待的整个 JSON:
{
"latitude": 52.24593734741211,
"longitude": -0.891636312007904,
"addresses":
["10 Watkin Terrace, , , , , Northampton, Northamptonshire",
"12 Watkin Terrace, , , , , Northampton, Northamptonshire",
"14 Watkin Terrace, , , , , Northampton, Northamptonshire",
"16 Watkin Terrace, , , , , Northampton, Northamptonshire",
"18 Watkin Terrace, , , , , Northampton, Northamptonshire",
"2 Watkin Terrace, , , , , Northampton, Northamptonshire",
"20 Watkin Terrace, , , , , Northampton, Northamptonshire",
"22 Watkin Terrace, , , , , Northampton, Northamptonshire",
"24 Watkin Terrace, , , , , Northampton, Northamptonshire",
"26 Watkin Terrace, , , , , Northampton, Northamptonshire",
"26a Watkin Terrace, , , , , Northampton, Northamptonshire",
"26b Watkin Terrace, , , , , Northampton, Northamptonshire",
"26c Watkin Terrace, , , , , Northampton, Northamptonshire",
"26d Watkin Terrace, , , , , Northampton, Northamptonshire",
"28 Watkin Terrace, , , , , Northampton, Northamptonshire",
"2a Watkin Terrace, , , , , Northampton, Northamptonshire",
"30 Watkin Terrace, , , , , Northampton, Northamptonshire",
"32 Watkin Terrace, , , , , Northampton, Northamptonshire",
"36 Watkin Terrace, , , , , Northampton, Northamptonshire",
"38 Watkin Terrace, , , , , Northampton, Northamptonshire",
"4 Watkin Terrace, , , , , Northampton, Northamptonshire",
"40 Watkin Terrace, , , , , Northampton, Northamptonshire",
"40b Watkin Terrace, , , , , Northampton, Northamptonshire",
"42 Watkin Terrace, , , , , Northampton, Northamptonshire",
"44 Watkin Terrace, , , , , Northampton, Northamptonshire",
"46 Watkin Terrace, , , , , Northampton, Northamptonshire",
"48 Watkin Terrace, , , , , Northampton, Northamptonshire",
"50 Watkin Terrace, , , , , Northampton, Northamptonshire",
"8 Watkin Terrace, , , , , Northampton, Northamptonshire",
"Flat 1, 6 Watkin Terrace, , , , Northampton, Northamptonshire",
"Flat 1, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 2, 6 Watkin Terrace, , , , Northampton, Northamptonshire",
"Flat 2, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 3, 6 Watkin Terrace, , , , Northampton, Northamptonshire",
"Flat 3, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 4, 6 Watkin Terrace, , , , Northampton, Northamptonshire",
"Flat 4, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 5, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 6, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 7, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 8, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire",
"Flat 9, Watkin Court, Watkin Terrace, , , Northampton, Northamptonshire"]
}
解决方案
您正在尝试从字符串数组中获取 json 对象。
而不是这个:
for(int i = 0; i < jsonArray.length(); i++){
jsonObject = jsonArray.getJSONObject(i);
addresses.add(jsonObject.toString());
}
试试这个:
for(int i = 0; i < jsonArray.length(); i++){
String spinnerElement = jsonArray.getString(i);
addresses.add(spinnerElement);
}
推荐阅读
- python - 如何获得完整的 PyCharm 代码执行结果?
- jquery - 如何从其他图标中定位单个图标?
- azure - 我需要哪些权限才能使 Azure 存储分析日志不可变?
- r - 提取数据框列中的字符串子集
- angular - 仅在移动视图上隐藏 ngx-popover
- c++ - 使用指针变量打印特定的数组变量
- android - 将 FloatArray 音频缓冲区保存到 Android 上的 wav 文件
- excel - 我如何将此代码转换为更短的代码?可能通过数组?
- javascript - 在 shell exec 期间无法使用 socket.io 发出当前服务器状态
- javascript - 如何从 ids 对象中删除项目