У меня проблема с созданием JSONObject из ненулевой строки. В проекте Android (в Android Studio) он не работает, но в проекте IntelliJ это работает.
Параметр: в бэкэнде работает сервер Flask. Пока что единственная цель - вернуть простой объект json. После запуска сервер прослушивает запросы на http://127.0.0.1:5000/
С другой стороны, у меня есть приложение для Android. Сейчас я просто хочу подключиться к серверу Flask, получить JSON в качестве ответа и распечатать его содержимое. Мне удалось установить соединение с сервером, я получил строковое представление ответа, но когда я пытаюсь построить объект JSON, используя новый JSON (String), я всегда получаю нулевое значение. Интересно, что в типичном Java-проекте в IntelliJ я могу создать объект JSON из одной и той же строки.
Я знаю, что эта проблема уже появилась в SO. Я прочитал темы ниже, но я не нашел решения ни в одном из ответов. Я пробовал много разных форм строкового представления; это не JSONArray; Я обработал возможное исключение; Я инициализирую объект JSON с нулем; сама строка не равна нулю (потому что когда я печатаю, я получаю результат - см. код).
Топис, на который я смотрел:
Обработка пустых значений в JSONObject ,
Исключение нулевого указателя android jsonObject ,
Нулевое значение для jsonObject в приложении для Android ,
получение нулевых значений JSONObject ,
Создание нового JSONObject из String Returns Null - JAVA / Android ,
Создание нового JSONObject из String Returns Null - JAVA / Android ,
Android JSONObject всегда возвращает «ноль» .
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"}.