Создание JSONObject из ненулевой строки приводит к нулю в Android Studio и JSONObject в IntelliJ - PullRequest
0 голосов
/ 13 января 2019

У меня проблема с созданием 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"}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...