从非null字符串生成JSONObject在Android Studio中生成null,在IntelliJ中生成JSONObject

时间:2019-01-13 10:27:33

标签: java android android-studio intellij-idea

我有一个用非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 JSONObjectandroid jsonObject Null Pointer ExceptionNull value for jsonObject in android appgetting null JSONObject valuesCreating new JSONObject from String Returns Null - JAVA / AndroidCreating new JSONObject from String Returns Null - JAVA / AndroidAndroid 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”}。

0 个答案:

没有答案