2015-11-03 2 views
3

Я имею конфигурацию сервера, чтобы говорить с Android клиентов как:PubNub Сервер не форматировать сообщение правильно

<?php 

require_once("mysql.class.php"); 
require_once("lib/autoloader.php"); 


// Setting up the PubNub Server: 
use Pubnub\Pubnub; 

$pubnub = new Pubnub(
    "pub-c...", ## PUBLISH_KEY 
    "sub-c..." ## SUBSCRIBE_KEY 
); 


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

print_r($info); 
print_r($post_data); 

?> 

и HTML:

<!doctype html> 
<html> 
<head> 
    <title>PubNub PHP Test Page</title> 
</head> 
    <body> 
     <form method="POST" action="index.php"> 
      <input type="submit" name="submit" value="TestSendMessage" /> 
     </form> 
    </body> 
</html> 

Публикация функция работает на сервере, как я могу см. сообщения, поступающие в консоль журнала клиентского приложения Android, но сообщение никогда не обрабатывается правильно и, следовательно, не отображается в списке, указанном в SubscribeCallback:

public void subscribeWithPresence(String channel) { 
    this.channel = channel; 
    Callback subscribeCallback = new Callback() { 
     @Override 
     public void successCallback(String channel, Object message) { 
      if (message instanceof JSONObject) { 
       try { 
        JSONObject jsonObj = (JSONObject) message; 

        JSONObject json = jsonObj.getJSONObject("data"); 
        final String name = json.getString(Constants.JSON_USER); 
        final String msg = json.getString(Constants.JSON_MSG); 
        final long time = json.getLong(Constants.JSON_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(); 
       } 
      } 
      Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString()); 

     } 

     @Override 
     public void connectCallback(String channel, Object message) { 
      Log.d("Subscribe", "Connected! " + message.toString()); 
      //hereNow(false); 
      // setStateLogin(); 
     } 
    }; 
    try { 
     mPubNub.subscribe(this.channel, subscribeCallback); 
     //presenceSubscribe(); 
    } catch (PubnubException e) { 
     e.printStackTrace(); 
     // Checking if success 
     Log.d("Fail subscribe ", "on channel: " + channel); 
    } 
} 

Тестирование выхода сервера в браузере, нажав TestSendMessage выходы:

Array ([0] => 1 [1] => Sent [2] => 14465159776373950) {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}} 

и в приложении выхода журнала из линии: Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString());

возвратов: D/PUBNUB: Channel: MainChat Msg: {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}

, как должно, но сообщение никогда не появляется в ListView сообщений и, таким образом, не выполняет разбор JSON.

Теги JSON просты из класса Константы как:

public static final String JSON_GROUP = "groupMessage"; 
public static final String JSON_USER = "chatUser"; 
public static final String JSON_MSG = "chatMsg"; 
public static final String JSON_TIME = "chatTime"; 

Как сервер отправки перенастроить, чтобы успех в приложении разборе?

+0

Ответ (сообщение) на устройстве по-прежнему остается только строкой. Мне просто нужно было преобразовать его в JSONObject jsonObj = new JSONObject (message), чтобы сделать его экземпляром JSONObject – Sauron

ответ

4

Отправка JSON над PubNub

Send the JSON object without stringifying it first. В случае для PHP не отправляйте сообщение json_encode. PubNub SDK будет кодировать и декодировать его для вас.

Это:

$post_data = array("type"=> "groupMessage", "data" => array(
    "chatUser" => "SERVER", "chatMsg" => "Now lets talk", 
    "chatTime"=>1446514201516)); 

Не так:

$post_data = json_encode(array("type"=> "groupMessage", "data" => array(
    "chatUser" => "SERVER", "chatMsg" => "Now lets talk", 
    "chatTime"=>1446514201516))); 

Прокомментируйте, если это разрешает или нет.

Смежные вопросы