我有一个用非null字符串制作JSONObject的问题。在Android项目中(在Android Studio中),它不起作用,但是在IntelliJ项目中,它起作用。
设置:后端有一个Flask服务器在运行。目前,它的唯一目的是返回一个简单的json对象。启动后,服务器在http://127.0.0.1:5000/
上侦听请求另一方面,我有一个Android应用程序。现在,我只想连接Flask服务器,获取JSON作为响应并打印其内容。我设法与服务器建立连接,得到响应的字符串表示形式,但是当我尝试使用新的JSON(String)构建JSON对象时,我总是得到null。有趣的是,在一个典型的Java项目中,在IntelliJ中,我能够从完全相同的字符串创建JSON对象。
我知道这个问题已经出现在SO中。我已经阅读了以下主题,但是在所有答案中都没有找到解决方案。我尝试了许多不同形式的字符串表示形式。它不是JSONArray;我处理一个可能的例外;我使用null初始化JSON对象;字符串本身不为null(因为在打印时会得到结果-请参见代码)。
我看过的上衣: Handling null in JSONObject, android jsonObject Null Pointer Exception, Null value for jsonObject in android app, getting null JSONObject values, Creating new JSONObject from String Returns Null - JAVA / Android, Creating new JSONObject from String Returns Null - JAVA / Android, Android JSONObject always returns "null"。
app.py
from flask import Flask, jsonify
from flask import request
app = Flask(__name__)
@app.route('/')
def index():
return jsonify({'a' : 100})
if __name__ == '__main__':
app.run()
RequestHandler.java
public class RequestHandler {
private static JSONObject result = null;
private static String json;
private static HttpURLConnection connection;
private static InputStream inputStream;
public static JSONObject makeRequest(String url, String method, HashMap<String, String> params) {
try {
URL urlObject = new URL(url);
connection = (HttpURLConnection) urlObject.openConnection();
connection.connect();
inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
inputStream.close();
json = stringBuilder.toString();
System.out.println(json);
result = new JSONObject(json);
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
ExampleUnitTest.java
public class ExampleUnitTest {
@Test
public void isCorrect() {
HashMap<String, String> params = new HashMap<>();
JSONObject o = RequestHandler.makeRequest("http://127.0.0.1:5000/", "GET", params);
assertEquals(1,1);
}
}
我得到以下结果:
System.out.println(json);
收益{“ a”:100}
System.out.println(result.toString());
为空。
如果我在IntelliJ中执行以下操作:
String test = "{'a':'b'}";
JSONObject o = new JSONObject(test);
System.out.println(o.toString());
我获得了{“ a”:“ b”}。