From d72e608807f7332e7ebaa59be241fe2ea74dcb3c Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Thu, 4 Apr 2019 15:12:09 -0500 Subject: [PATCH] - Added the required deserialization logic to parse the response to the 'get_objects' API call with an asset bitasset data type - Removed unresponsive node URLs from the sample app --- .../graphenej/api/android/DeserializationMap.java | 7 +++++++ .../cy/agorise/graphenej/api/android/NetworkService.java | 8 +++++--- .../java/cy/agorise/labs/sample/PerformCallActivity.java | 9 ++++++++- .../java/cy/agorise/labs/sample/SampleApplication.java | 2 -- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java b/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java index a283feb..0581848 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/android/DeserializationMap.java @@ -38,6 +38,8 @@ import cy.agorise.graphenej.api.calls.GetTransaction; import cy.agorise.graphenej.api.calls.ListAssets; import cy.agorise.graphenej.api.calls.LookupAssetSymbols; import cy.agorise.graphenej.models.AccountProperties; +import cy.agorise.graphenej.models.AssetFeed; +import cy.agorise.graphenej.models.BitAssetData; import cy.agorise.graphenej.models.Block; import cy.agorise.graphenej.models.BlockHeader; import cy.agorise.graphenej.models.BucketObject; @@ -45,6 +47,7 @@ import cy.agorise.graphenej.models.DynamicGlobalProperties; import cy.agorise.graphenej.models.FullAccountDetails; import cy.agorise.graphenej.models.HistoryOperationDetail; import cy.agorise.graphenej.models.OperationHistory; +import cy.agorise.graphenej.models.ReportedAssetFeed; import cy.agorise.graphenej.operations.CustomOperation; import cy.agorise.graphenej.operations.LimitOrderCreateOperation; import cy.agorise.graphenej.operations.TransferOperation; @@ -125,6 +128,10 @@ public class DeserializationMap { mClassMap.put(GetObjects.class, List.class); Gson getObjectsGson = new GsonBuilder() .registerTypeAdapter(Asset.class, new Asset.AssetDeserializer()) + .registerTypeAdapter(BitAssetData.class, new BitAssetData.BitAssetDataDeserializer()) + .registerTypeAdapter(ReportedAssetFeed.class, new ReportedAssetFeed.ReportedAssetFeedDeserializer()) + .registerTypeAdapter(AssetFeed.class, new AssetFeed.AssetFeedDeserializer()) + .registerTypeAdapter(AssetAmount.class, new AssetAmount.AssetAmountDeserializer()) .create(); mGsonMap.put(GetObjects.class, getObjectsGson); diff --git a/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java b/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java index adf9e3d..c92880f 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/api/android/NetworkService.java @@ -45,6 +45,7 @@ import cy.agorise.graphenej.api.calls.GetRequiredFees; import cy.agorise.graphenej.api.calls.ListAssets; import cy.agorise.graphenej.models.AccountProperties; import cy.agorise.graphenej.models.ApiCall; +import cy.agorise.graphenej.models.BitAssetData; import cy.agorise.graphenej.models.Block; import cy.agorise.graphenej.models.BlockHeader; import cy.agorise.graphenej.models.BucketObject; @@ -522,7 +523,6 @@ public class NetworkService extends Service { */ private void handleJsonRpcResponse(JsonRpcResponse response, String text){ JsonRpcResponse parsedResponse = null; - Class requestClass = mRequestClassMap.get(response.id); if(requestClass != null){ // Removing the class entry in the map @@ -621,8 +621,10 @@ public class NetworkService extends Service { * @param response Response to a 'get_objects' API call */ private JsonRpcResponse handleGetObject(String response){ - //TODO: Implement a proper de-serialization logic - return null; + //TODO: Add support for other types of 'get_objects' request types + Gson gson = mDeserializationMap.getGson(GetObjects.class); + Type GetBitAssetResponse = new TypeToken>>(){}.getType(); + return gson.fromJson(response, GetBitAssetResponse); } /** diff --git a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java index c2208b0..2ddb70f 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java +++ b/sample/src/main/java/cy/agorise/labs/sample/PerformCallActivity.java @@ -34,6 +34,7 @@ import cy.agorise.graphenej.BlockData; import cy.agorise.graphenej.BrainKey; import cy.agorise.graphenej.Memo; import cy.agorise.graphenej.OperationType; +import cy.agorise.graphenej.Price; import cy.agorise.graphenej.RPC; import cy.agorise.graphenej.Transaction; import cy.agorise.graphenej.UserAccount; @@ -57,6 +58,8 @@ import cy.agorise.graphenej.api.calls.GetRequiredFees; import cy.agorise.graphenej.api.calls.GetTransaction; import cy.agorise.graphenej.api.calls.ListAssets; import cy.agorise.graphenej.errors.MalformedAddressException; +import cy.agorise.graphenej.models.AssetFeed; +import cy.agorise.graphenej.models.BitAssetData; import cy.agorise.graphenej.models.JsonRpcResponse; import cy.agorise.graphenej.operations.TransferOperation; import cy.agorise.graphenej.operations.TransferOperationBuilder; @@ -185,7 +188,6 @@ public class PerformCallActivity extends ConnectedActivity { @Override public void accept(Object message) throws Exception { - Log.d(TAG,"accept. Msg class: "+message.getClass()); if(message instanceof ConnectionStatusUpdate){ // TODO: Update UI ? }else if(message instanceof JsonRpcResponse){ @@ -589,6 +591,11 @@ public class PerformCallActivity extends ConnectedActivity { Transaction tx = (Transaction) response.result; mResponseView.setText(mResponseView.getText() + String.format("[%s][%s]", tx.toString(), Util.bytesToHex(tx.getHash()))); break; + case RPC.CALL_GET_OBJECTS: + List bitAssetDataArray = (List) response.result; + BitAssetData bitAssetData = bitAssetDataArray.get(0); + AssetFeed assetFeed = bitAssetData.getCurrentFeed(); + Price price = assetFeed.getSettlementPrice(); case RPC.CALL_GET_ACCOUNTS: case RPC.CALL_GET_BLOCK: case RPC.CALL_GET_BLOCK_HEADER: diff --git a/sample/src/main/java/cy/agorise/labs/sample/SampleApplication.java b/sample/src/main/java/cy/agorise/labs/sample/SampleApplication.java index 1336b2d..7127a33 100644 --- a/sample/src/main/java/cy/agorise/labs/sample/SampleApplication.java +++ b/sample/src/main/java/cy/agorise/labs/sample/SampleApplication.java @@ -23,8 +23,6 @@ public class SampleApplication extends Application { int requestedApis = ApiAccess.API_DATABASE | ApiAccess.API_HISTORY | ApiAccess.API_NETWORK_BROADCAST; String[] nodeURLs = new String[]{ - "wss://miami.bitshares.apasia.tech/ws", - "wss://bitshares.crypto.fans/ws", "wss://bitshares.openledger.info/ws", "wss://us.nodes.bitshares.ws", "wss://eu.nodes.bitshares.ws"