我正在尝试更新我的旧应用程序,该应用程序基本上是一个共享的购物清单。它以前已链接到我学校的网站和数据库,但是由于无法访问,我对其进行了反向工程。
该应用最初是为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,应为“确定”?
我记录了itemData字符串,并获取了它,因此它至少可以获取数据:
与jsonItemsString相同:
可能是{“ records”:-弄乱了一部分吗?它曾经不在那里,但是似乎对api的更新添加了它。
答案 0 :(得分:0)
好的,所以我找出问题出在哪里。 我所做的就是交换
JSONArray jsonItemTable = jsonData.optJSONArray(TABLE_NAME);
使用
JSONArray jsonItemTable = jsonData.getJSONArray("records");
在Item.java中
不知道为什么它在我的第一个版本中起作用,但是感谢所有评论并让我走上正轨的人!