2016-02-05 122 views
0

得到JSONArray我必須返回JSON數據同步.NET Web服務支持的多平臺應用程序科爾多瓦。這工作正常。無法從.NET Web服務

我現在想給本地調用加入到被鉤到廣播接收器,這樣我可以提供,當應用程序沒有運行豐富通知應用程序的Android版本。

這些事件的調度和執行被細運行;但是我在處理Web服務調用的結果時遇到了實際問題。

的web服務調用(VB.net)爲:

<OperationContract()> 
<WebInvoke(Method:="POST", ResponseFormat:=WebMessageFormat.Json)> 
Public Function SyncNotifications_Native(ByVal dateAfter As String, ByVal which As Integer, ByVal userID As Int32) As String 

Dim rowsList As New List(Of Dictionary(Of String, Object))() 
Dim row As Dictionary(Of String, Object) 
::: 
::: 
While dr.Read() 
       row = New Dictionary(Of String, Object) 
       row.Add("allow_reply", dr("allow_reply")) 
       row.Add("content", dr("content")) 
       row.Add("date_added", dr("date_added") 
       row.Add("date_deleted", dr("date_deleted") 
       row.Add("date_read", dr("date_read") 
       row.Add("deleted", dr("deleted")) 
       row.Add("last_update", Now().ToString("yyyy-MM-dd HH:mm:ss")) 
       row.Add("notification_id", dr("notification_id")) 
       row.Add("subject_line", dr("subject_line")) 
       row.Add("user_id", dr("user_id")) 
       rowsList.Add(row) 
      End While 

Return New JavaScriptSerializer().Serialize(details) 
End Function 

這應返回零個或多個條目的陣列。 我使用的AsyncTask獲取數據。這是我從通話中得到的數據:

{"d":" 
[{\"allow_reply\":1,\"content\":\"test content\", 
\"date_added\":\"2016-02-04 23:37:50\",\"date_deleted\":\"\", 
\"date_read\":\"\",\"deleted\":0,\"last_update\":\"2016-02-04 23:38:43\", 
\"notification_id\":27,\"subject_line\":\"test\",\"user_id\":1}] 
"} 

我看過各種資源,並嘗試過所有類型的解決方案。這是目前我在做什麼:

轉換返回的字符串成JSON對象:

JSONObject json2 = new JSONObject(s); 

嘗試獲得了數組對象:

JSONArray results = json2.getJSONArray("d"); 

這種方式給我一個錯誤:

java.lang.String cannot be converted to JSONArray 

我在另一篇文章中看到了一個建議,我實際上正在返回一個SOAP響應f rom我的網絡服務;我不知道,我還沒有看到它開始

{"d": 

我怎樣才能正確地得到返回數組成JSONArray,這樣我可以將它傳遞給另一個功能的任何其它例如JSON響應?

感謝

+0

錯誤:java.lang.String中不能轉換到JSONArray 是因爲「d」的值:是一個字符串。看:{「d」:「[..]」。你應該返回一個像這樣的格式的數組:{「d」:[..]沒有引號 – JpCrow

+0

這就是Web服務發送它的方式。如果有任何幫助,我在Web服務代碼中添加了更多詳細信息? – DaveSav

+0

我不知道如何解決這個在服務器端,但在客戶端上,你可以使用'JSONObject obj = new JSONObject(s); String arrStr = obj.getString(「d」); JSONArray array = new JSONArray(arrStr);' – varren

回答

1

上午一個Java開發這樣:

  • {"d": "[{\"allow_reply\":1,\....."}是一個對象
  • d
  • 其值爲string"[{\"allow_reply\":1,\....."},這就是爲什麼你會得到java.lang.String cannot be converted to JSONArray
  • 所以你必須parseJavascript(又名 「反序列化」)

所以(你必須translate to Java):

//this is the data your service returns 
var foo = {"d": "[{\"allow_reply\":1,\"content\":\"test content\",\"date_added\":\"2016-02-04 23:37:50\",\"date_deleted\":\"\",\"date_read\":\"\", \"deleted\":0,\"last_update\":\"2016-02-04 23:38:43\",\"notification_id\":27,\"subject_line\":\"test\",\"user_id\":1}]"}; 

//parse the string 
var data = JSON.parse(foo.d); 

data現在包含您的陣列

所以在上面的代碼,您必須parse字符串並將其轉換成它代表(從string)的對象。

H個...