2015-11-03 52 views
1

在我的PHP的服务器我传递应该是什么编码的JSONObject到PubNub通道为:处理字符串传递到JSONObject的

$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应用内,测试的类传入消息的信道上返回,这是一个字符串对象,而不是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 =新的JSONObject(消息),使其成为JSONObject的实例 – mjp66

+0

@Sauron - 这不是一个重复问题,你问这里 http://stackoverflow.com/questions/33490282/ pubnub服务器 - 不 - 不格式消息正确 –

回答

2

您在设备上获得的响应(消息)仍然只是一个需要转换为JSONObject()的字符串。现在

JSONObject jsonObj = new JSONObject(message); 

它可以,如果它是一个JSONObject()的一个适当的实例中checkd)