【发布时间】: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 内容吗?问题可能来自这里……
-
你能调试一下,检查是否在 jsonItemString 中获取值,然后使用 jsonData,以便于识别它!