我将从本地数据库获取JSON。然后,我想将json放入ArrayList中。我想调用parseJSON函数。但是JSON为空。我应该在哪里调用该函数,非常感谢:))
@Override
protected String doInBackground(Void... voids) {
try {
URL url = new URL(urlWebService);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
StringBuilder sb = new StringBuilder();
InputStream input = con.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(input));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}
parseJSON(json);
return sb.toString().trim();
} catch (Exception e) {
return null;
}
}
}
GetJSON getJSON = new GetJSON(
);
getJSON.execute();
}
private void parseJSON(String json) {
Gson gson = new Gson();
Type type = new TypeToken<List<EssayElement>>(){}.getType();
List<EssayElement> mList = gson.fromJson(json, type);
for (EssayElement essayElement : mList){
Log.i("Message: " +
"", essayElement.id + "-" + essayElement.title + "-" + essayElement.essay + "-" + essayElement.date + "-" + essayElement.time);
}
}
带有字符串“ json”的空对象引用
答案 0 :(得分:1)
我建议使用适当的http库来处理对您的请求,例如Volley或Retrofit ...还内置JSON和错误处理,因此可以完全删除AsyncTask
但是您所拥有的没问题,仅json
不应在while循环之后使用,它只是http响应的最后一行,而不是完整的json(假设有多行)
您应该真正考虑在onPostExecute
中解析结果,甚至可能使parse方法返回实际对象或显示到UI
答案 1 :(得分:0)
您要将字符串追加到StringBuilder sb = new StringBuilder();
。您必须像这样parseJSON(sb.toString());
进行调用,因为String json
只是一个指针,不包含您想要的实际字符串。
答案 2 :(得分:0)
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
String json = sb.toString();
您可以改用我的代码段,对我来说效果很好。现在,您可以将son变量用于您的私有void parseJSON(String json)函数。