Обработка строки, переданной в JSONObject

1

На моем сервере PHP я передаю то, что должно быть закодированным JSONObject в канал PubNub, как:

$post_data = array("type"=> "groupMessage", "data" => array("chatUser" => "SERVER", "chatMsg" => "Now lets talk", "chatTime"=>1446514201516));
$post_data = json_encode($post_data, JSON_FORCE_OBJECT);
$info = $pubnub->publish('MainChat', $post_data);

Обратите внимание, что я использую JSON_FORCE_OBJECT, который должен обеспечивать вывод JSONObject. Обращаясь к журналам, вывод отображается как:

{"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}

Однако в клиентском приложении Android тестирование класса входящего сообщения на канале возвращает, что это объект String, а не JSON, и не получает его, if (message instanceof JSONObject) {:

            Log.d("message class", message.getClass().toString());

            if (message instanceof JSONObject) {
                try {
                    JSONObject jsonObj = (JSONObject) message;
                    Log.d("jsonObj is ", jsonObj.toString());

                    JSONObject json = jsonObj.getJSONObject("data");
                    final String name = json.getString(Constants.JSON_USER);
                    Log.d("name is: ", name);
                    final String msg = json.getString(Constants.JSON_MSG);
                    Log.d("msg is: ", msg);
                    final long time = json.getLong(Constants.JSON_TIME);
                    Log.d("time is: ", String.valueOf(time) );
                    if (name.equals(mPubNub.getUUID())) return; // Ignore own messages
                    final ChatMessage chatMsg = new ChatMessage(name, msg, time);
                    presentActivity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // Adding messages published to the channel
                            mChatAdapter.addMessage(chatMsg);
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }

Как я могу гарантировать, что PHP передает JSONObject в канал?

  • 1
    Ответ (сообщение) на устройстве все еще является строкой. Вам необходимо преобразовать его в JSONObject. JsonObj = new JSONObject (message), чтобы сделать его экземпляром JSONObject.
  • 0
    @Sauron - разве это не повторяющийся вопрос, который вы задали здесь stackoverflow.com/questions/33490282/…
Теги:
pubnub

1 ответ

2
Лучший ответ

Ответ (сообщение), который вы получаете на своем устройстве, по-прежнему представляет собой только строку, которая должна быть преобразована в JSONObject().

JSONObject jsonObj = new JSONObject(message);

Теперь он может быть проверен, если это правильный экземпляр JSONObject();)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню