我只是想尝试创建这样的JSON对象:
JSONObject jsonObject = new JSONObject(new JsonUtility().execute(UrlUtility.url + "/" + lessonUrl).get());
此处发生错误^在catch
块中收到消息:
org.json.JSONException: End of input at character 0 of
JsonUtility
课程如下(我相信问题不在于但仍然存在):
private class JsonUtility extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String result = "";
try {
InputStream inputStream = new URL(params[0]).openStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
StringBuilder sBuilder = new StringBuilder();
// Reading Json into StringBuilder
String line = null;
while ((line = bReader.readLine()) != null) {
sBuilder.append(line + "\n");
}
inputStream.close();
// Converting Json from StringBuilder to String
result = sBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
您会看到响应是从字符串连接起来的(由于应用程序逻辑)。最后一个字符串是:http://itvdn-api.azurewebsites.net/api/courses/test-driven-development/tdd-introduction
。正如您所看到的那样,当我重定向到该链接时,它会提供JSON响应。
我尝试评估此UrlUtility.url
并收到:
奇怪的char数组结尾让我困惑。预示着这个问题。试图使用String.replaceAll("'\u0000'0", "" )
替换这些字符。没工作。
请帮忙。会欣赏任何想法。感谢。
修改
此外,当我将链接硬编码为:
JSONObject jsonObject = new JSONObject(new JsonUtility().execute("http://itvdn-api.azurewebsites.net/api/courses/test-driven-development/tdd-introduction").get());
有效!
编辑#2 @ρяσѕρєяK
result = sBuilder.toString();
为空 - ""
,因为它无法解析该连接字符串。
注意:我一直在使用与此应用程序中的不同链接相同的解析器,例如http://itvdn-api.azurewebsites.net/api/courses并且工作正常(但没有连接链接)
答案 0 :(得分:1)
/**
* Convert InputStream into String
* @param is
* @return
* @throws IOException Throws an IO Exception if input stream cannot be read
*/
public static String stringFromInputStream(InputStream is) throws IOException {
if (is != null) {
byte[] bytes = new byte[1024];
StringBuilder x = new StringBuilder();
int numRead = 0;
while ((numRead = is.read(bytes)) >= 0)
x.append(new String(bytes, 0, numRead));
return x.toString();
}
else {
return "";
}
}
使用此方法读取输入流并获取字符串。