2016-02-26 73 views
2

我試圖解析與Android一個JSON流把所有的元素標記在ActivityMap安卓:如何解析BIG JSON流

問題是數據量:json返回mysql數據庫的3300行,每行有3個對象。因此,當我嘗試使用異步任務獲取所有數據時,系統在一段時間後返回應用程序不響應。

有什麼建議嗎?

回答

0

也許你可以使用Service。您可以在here

服務,可以找到的教程主要是利用大數據傳輸,還例如定期方法連接每2小時服務器。在後臺和用戶上工作的服務看不到,因爲服務不包括僅在後臺工作的佈局。你可以設置你的服務自我毀滅當你的工作完成。只需觸發你的Service,連接你的流和處理你的大回應。當完成自我毀壞你的服務。

+0

我試過的東西,這些天,但問題也仍然存在與服務。當它嘗試從它從服務器獲得的字符串中創建JSON對象時,應用程序會轉到ANR。正如@Marzouk所說,也許我必須做多個調用服務器才能獲取json數據 – garsim

+0

您可以使用分頁方法。例如,從json返回20個對象和下一個頁面url,這是一個交易。你也可以使用Gson檢查下面的評論。只需在這裏創建POJO類:http://www.jsonschema2pojo.org/ 但最好的方法是在服務器中使用分頁方法。只需返回nextpageurl字段。如果等於na或null,則停止您的請求,但等於任何字符串創建新請求並繼續。 –

0

我認爲你應該做的服務解析沒有在應用程序中的活動。

此外,你可以分開呼叫一個較小的調用,例如獲得一個單獨的AsyncTask每1000行,但它不是一個更好的解決方案在性能明智,我認爲更好的方法是使用服務或裝載機,而不是傳統AsyncTask方式,它與它自身的活動有很大的關係。

裝載機:loaders-and-loadermanager

服務:android_services

另外,請檢查您的服務器端超時配置,也可能是由於從服務器端超時。

+1

我認爲我必須做一個以上的電話,所以我可以用更小的JSON對象。後來我試試:) – garsim

+0

另外,請檢查您的服務器端超時配置,也可能是由於從服務器端超時。 – Marzouk

-1

如果你有JSON數據,以及相應的模型類,並且要映射JSON數據模型類,我會建議使用GSON()庫。它會將你的json數據解析到你的java類中。爲了包含Gson()庫,請在Gradle依賴項中包含以下行。

compile 'com.google.code.gson:gson:2.3' 

檢查下面的鏈接,這會讓你更願意使用這個庫。

Link1Link2