从数据库填充 JSONArray 的问题
Posted
技术标签:
【中文标题】从数据库填充 JSONArray 的问题【英文标题】:Problem with populating JSONArray from database 【发布时间】:2019-08-31 07:05:03 【问题描述】:我正在尝试更新我的旧应用程序,它基本上是一个共享购物清单。它以前链接到我的学校网站和数据库,但由于无法再访问,我对其进行了逆向工程。 该应用程序最初是为 sdk 23 创建的 问题是它似乎没有使用this api 填充 JSONArray。 代码如下:
//MainActivity.java
@Override
protected Long doInBackground(String... params)
HttpsURLConnection connection = null;
try
URL itemListURL = new URL(itemList_URI);
connection = (HttpsURLConnection) itemListURL.openConnection();
connection.connect();
int status = connection.getResponseCode();
Log.d("HTTPS GET", "status " + status);
if (status == HttpsURLConnection.HTTP_OK)
InputStream is = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String responseString;
StringBuilder sb = new StringBuilder();
while ((responseString = reader.readLine()) != null)
sb = sb.append(responseString);
String itemData = sb.toString();
itemArrayList = Item.createItemList(itemData);
.......
//Item.java
//Create ItemList
public static ArrayList<Item> createItemList(String jsonItemsString)
throws JSONException, NullPointerException
ArrayList<Item> itemList = new ArrayList<Item>();
JSONObject jsonData = new JSONObject(jsonItemsString);
JSONArray jsonItemTable = jsonData.optJSONArray(TABLE_NAME)
for (int i = 0; i <= jsonItemTable.length(); i++)
JSONObject jsonItem = (JSONObject) jsonItemTable.get(i);
Item thisItem = new Item(jsonItem);
itemList.add(thisItem);
return itemList;
for 循环抛出 NullPointerException,这让我相信 JSONArray 没有填充。 这是网址和响应的图片:
所以要么无法读取值,要么数据库连接失败(我对此表示怀疑,因为没有错误指示),但我不知道如何验证这一点 对不起,这可能是一个混乱的问题。我在将近 4 年的时间里做过任何编程,所以有点生疏。我很乐意提供所需的任何信息。
编辑:有人建议一个线程询问 NullPointerException 是什么,可能会解决我的问题,但我知道 npe 是什么,我只是不知道为什么会抛出它
更新:D/HTTP GET:状态 200,应该是“Ok”吗? 我记录了 itemData 字符串,得到了这个,所以它至少可以得到数据: 与 jsonItemsString 相同: 会不会是 "records": - 搞砸的部分?它以前不存在,但似乎对 api 的更新添加了这个。
【问题讨论】:
我强烈建议对 API 调用使用改造之类的库。它会让事情变得容易得多。 github.com/square/retrofit 您能打印出 jsonItemsString 以便我们检查 json 内容吗?问题可能来自这里…… What is a NullPointerException, and how do I fix it?的可能重复 你能调试一下,检查是否在 jsonItemString 中获取值,然后使用 jsonData,以便于识别它! 【参考方案1】:好的,所以我发现了哪里出错了。 我所做的只是交换
JSONArray jsonItemTable = jsonData.optJSONArray(TABLE_NAME);
有
JSONArray jsonItemTable = jsonData.getJSONArray("records");
在 Item.java 不知道为什么它在我的第一个版本中有效,但感谢所有评论并让我走上正轨的人!
【讨论】:
以上是关于从数据库填充 JSONArray 的问题的主要内容,如果未能解决你的问题,请参考以下文章
PHP-AJAX:如何通过 php/json 数组从查询中填充 jquery 数据表
将解析的 JSONArray 加载到 recyclerView