Fixed a remaining issue with the deserialization of the BitAssetData 'get_object' response
This commit is contained in:
parent
857d861e4b
commit
d0f9ddbbb9
8 changed files with 111 additions and 29 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -103,3 +103,5 @@ release.properties
|
||||||
graphenej/build
|
graphenej/build
|
||||||
|
|
||||||
local.properties
|
local.properties
|
||||||
|
|
||||||
|
sample
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
# org.gradle.parallel=true
|
# org.gradle.parallel=true
|
||||||
|
|
||||||
VERSION_NAME=0.4.7-alpha1
|
VERSION_NAME=0.4.7-alpha3
|
||||||
VERSION_CODE=10
|
VERSION_CODE=12
|
||||||
GROUP=com.github.bilthon
|
GROUP=com.github.bilthon
|
||||||
|
|
||||||
POM_DESCRIPTION=A Java library for mobile app Developers; Graphene/Bitshares blockchain.
|
POM_DESCRIPTION=A Java library for mobile app Developers; Graphene/Bitshares blockchain.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
group 'cy.agorise'
|
group 'cy.agorise'
|
||||||
version '0.4.6'
|
version '0.4.7-alpha2'
|
||||||
|
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
apply from: 'maven-push.gradle'
|
apply from: 'maven-push.gradle'
|
||||||
|
@ -21,8 +21,8 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 9
|
minSdkVersion 9
|
||||||
targetSdkVersion 24
|
targetSdkVersion 24
|
||||||
versionCode 10
|
versionCode 12
|
||||||
versionName "0.4.7-alpha1"
|
versionName "0.4.7-alpha3"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="cy.agorise.graphenej"
|
package="cy.agorise.graphenej">
|
||||||
android:versionCode="10"
|
|
||||||
android:versionName="0.4.7-alpha1" >
|
|
||||||
<uses-sdk android:minSdkVersion="1" />
|
<uses-sdk android:minSdkVersion="1" />
|
||||||
<application/>
|
<application/>
|
||||||
</manifest>
|
</manifest>
|
|
@ -5,12 +5,10 @@ import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.reflect.TypeToken;
|
|
||||||
import com.neovisionaries.ws.client.WebSocket;
|
import com.neovisionaries.ws.client.WebSocket;
|
||||||
import com.neovisionaries.ws.client.WebSocketFrame;
|
import com.neovisionaries.ws.client.WebSocketFrame;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -93,6 +91,7 @@ public class GetObjects extends BaseGrapheneHandler {
|
||||||
String response = frame.getPayloadText();
|
String response = frame.getPayloadText();
|
||||||
GsonBuilder gsonBuilder = new GsonBuilder();
|
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||||
|
|
||||||
|
gsonBuilder.registerTypeAdapter(BitAssetData.class, new BitAssetData.BitAssetDataDeserializer());
|
||||||
gsonBuilder.registerTypeAdapter(AssetFeed.class, new AssetFeed.AssetFeedDeserializer());
|
gsonBuilder.registerTypeAdapter(AssetFeed.class, new AssetFeed.AssetFeedDeserializer());
|
||||||
gsonBuilder.registerTypeAdapter(ReportedAssetFeed.class, new ReportedAssetFeed.ReportedAssetFeedDeserializer());
|
gsonBuilder.registerTypeAdapter(ReportedAssetFeed.class, new ReportedAssetFeed.ReportedAssetFeedDeserializer());
|
||||||
gsonBuilder.registerTypeAdapter(AssetAmount.class, new AssetAmount.AssetAmountDeserializer());
|
gsonBuilder.registerTypeAdapter(AssetAmount.class, new AssetAmount.AssetAmountDeserializer());
|
||||||
|
@ -106,7 +105,8 @@ public class GetObjects extends BaseGrapheneHandler {
|
||||||
|
|
||||||
JsonParser parser = new JsonParser();
|
JsonParser parser = new JsonParser();
|
||||||
JsonArray resultArray = parser.parse(response).getAsJsonObject().get(WitnessResponse.KEY_RESULT).getAsJsonArray();
|
JsonArray resultArray = parser.parse(response).getAsJsonObject().get(WitnessResponse.KEY_RESULT).getAsJsonArray();
|
||||||
for(JsonElement element : resultArray){
|
for(int i = 0; i < resultArray.size(); i++){
|
||||||
|
JsonElement element = resultArray.get(i);
|
||||||
String id = element.getAsJsonObject().get(GrapheneObject.KEY_ID).getAsString();
|
String id = element.getAsJsonObject().get(GrapheneObject.KEY_ID).getAsString();
|
||||||
GrapheneObject grapheneObject = new GrapheneObject(id);
|
GrapheneObject grapheneObject = new GrapheneObject(id);
|
||||||
switch (grapheneObject.getObjectType()){
|
switch (grapheneObject.getObjectType()){
|
||||||
|
@ -119,11 +119,9 @@ public class GetObjects extends BaseGrapheneHandler {
|
||||||
parsedResult.add(account);
|
parsedResult.add(account);
|
||||||
break;
|
break;
|
||||||
case ASSET_BITASSET_DATA:
|
case ASSET_BITASSET_DATA:
|
||||||
Type BitAssetDataType = new TypeToken<WitnessResponse<List<BitAssetData>>>(){}.getType();
|
BitAssetData bitAssetData = gson.fromJson(element, BitAssetData.class);
|
||||||
WitnessResponse<List<BitAssetData>> witnessResponse = gsonBuilder.create().fromJson(response, BitAssetDataType);
|
parsedResult.add(bitAssetData);
|
||||||
for(BitAssetData bitAssetData : witnessResponse.result){
|
break;
|
||||||
parsedResult.add(bitAssetData);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,21 @@
|
||||||
package cy.agorise.graphenej.models;
|
package cy.agorise.graphenej.models;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonDeserializer;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import cy.agorise.graphenej.GrapheneObject;
|
import cy.agorise.graphenej.GrapheneObject;
|
||||||
import cy.agorise.graphenej.Price;
|
import cy.agorise.graphenej.Price;
|
||||||
|
import cy.agorise.graphenej.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the representation of the response from the 'get_objects' call with
|
* This is the representation of the response from the 'get_objects' call with
|
||||||
|
@ -9,16 +23,23 @@ import cy.agorise.graphenej.Price;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BitAssetData extends GrapheneObject {
|
public class BitAssetData extends GrapheneObject {
|
||||||
|
public static final String KEY_FEEDS = "feeds";
|
||||||
public static final String KEY_CURRENT_FEED = "current_feed";
|
public static final String KEY_CURRENT_FEED = "current_feed";
|
||||||
|
public static final String KEY_CURRENT_FEED_PUBLICATION_TIME = "current_feed_publication_time";
|
||||||
|
public static final String KEY_OPERATIONS = "operations";
|
||||||
|
public static final String KEY_FORCE_SETTLED_VOLUME = "force_settled_volume";
|
||||||
|
public static final String KEY_IS_PREDICTION_MARKET = "is_prediction_market";
|
||||||
|
public static final String KEY_SETTLEMENT_PRICE = "settlement_price";
|
||||||
|
public static final String KEY_SETTLEMENT_FUND = "settlement_fund";
|
||||||
|
|
||||||
public ReportedAssetFeed[] feeds;
|
private ReportedAssetFeed[] feeds;
|
||||||
public AssetFeed current_feed;
|
private AssetFeed current_feed;
|
||||||
public String current_feed_publication_time;
|
private Date current_feed_publication_time;
|
||||||
public Object options;
|
private Options options;
|
||||||
public long force_settled_volume;
|
private long force_settled_volume;
|
||||||
public boolean is_prediction_market;
|
private boolean is_prediction_market;
|
||||||
public Price settlement_price;
|
private Price settlement_price;
|
||||||
public long settlement_fund;
|
private long settlement_fund;
|
||||||
|
|
||||||
public BitAssetData(String id) {
|
public BitAssetData(String id) {
|
||||||
super(id);
|
super(id);
|
||||||
|
@ -40,19 +61,24 @@ public class BitAssetData extends GrapheneObject {
|
||||||
this.current_feed = current_feed;
|
this.current_feed = current_feed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentFeedPublicationTime() {
|
public Date getCurrentFeedPublicationTime() {
|
||||||
return current_feed_publication_time;
|
return current_feed_publication_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentFeedPublicationTime(String current_feed_publication_time) {
|
public void setCurrentFeedPublicationTime(String currentFeedPublicationTime) {
|
||||||
this.current_feed_publication_time = current_feed_publication_time;
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Util.TIME_DATE_FORMAT);
|
||||||
|
try {
|
||||||
|
this.current_feed_publication_time = simpleDateFormat.parse(currentFeedPublicationTime);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getOptions() {
|
public Options getOptions() {
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOptions(Object options) {
|
public void setOptions(Options options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,4 +113,46 @@ public class BitAssetData extends GrapheneObject {
|
||||||
public void setSettlementFund(long settlementFund) {
|
public void setSettlementFund(long settlementFund) {
|
||||||
this.settlement_fund = settlementFund;
|
this.settlement_fund = settlementFund;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom deserializer used to instantiate the BitAssetData class from the response of the
|
||||||
|
* 'get_objects' API call.
|
||||||
|
*/
|
||||||
|
public static class BitAssetDataDeserializer implements JsonDeserializer<BitAssetData> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BitAssetData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
||||||
|
JsonObject jsonObject = json.getAsJsonObject();
|
||||||
|
String id = jsonObject.get(GrapheneObject.KEY_ID).getAsString();
|
||||||
|
BitAssetData bitAssetData = new BitAssetData(id);
|
||||||
|
ArrayList<ReportedAssetFeed> reportedAssetFeeds = new ArrayList<>();
|
||||||
|
|
||||||
|
JsonArray jsonAssetFeeds = jsonObject.get(KEY_FEEDS).getAsJsonArray();
|
||||||
|
for(JsonElement jsonFeed : jsonAssetFeeds){
|
||||||
|
ReportedAssetFeed reportedAssetFeed = context.deserialize(jsonFeed, ReportedAssetFeed.class);
|
||||||
|
reportedAssetFeeds.add(reportedAssetFeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deserializing attributes
|
||||||
|
JsonElement jsonCurrentFeed = jsonObject.get(KEY_CURRENT_FEED).getAsJsonObject();
|
||||||
|
AssetFeed assetFeed = context.deserialize(jsonCurrentFeed, AssetFeed.class);
|
||||||
|
String publicationTime = jsonObject.get(KEY_CURRENT_FEED_PUBLICATION_TIME).getAsString();
|
||||||
|
Options options = context.deserialize(jsonObject.get(KEY_OPERATIONS), Options.class);
|
||||||
|
long forceSettledVolume = jsonObject.get(KEY_FORCE_SETTLED_VOLUME).getAsLong();
|
||||||
|
boolean isPredictionMarket = jsonObject.get(KEY_IS_PREDICTION_MARKET).getAsBoolean();
|
||||||
|
Price settlementPrice = context.deserialize(jsonObject.get(KEY_SETTLEMENT_PRICE), Price.class);
|
||||||
|
long settlementFund = jsonObject.get(KEY_SETTLEMENT_FUND).getAsLong();
|
||||||
|
|
||||||
|
// Setting attributes
|
||||||
|
bitAssetData.setFeeds(reportedAssetFeeds.toArray(new ReportedAssetFeed[reportedAssetFeeds.size()]));
|
||||||
|
bitAssetData.setCurrentFeed(assetFeed);
|
||||||
|
bitAssetData.setCurrentFeedPublicationTime(publicationTime);
|
||||||
|
bitAssetData.setOptions(options);
|
||||||
|
bitAssetData.setForceSettledVolume(forceSettledVolume);
|
||||||
|
bitAssetData.setIsPredictionMarket(isPredictionMarket);
|
||||||
|
bitAssetData.setSettlementPrice(settlementPrice);
|
||||||
|
bitAssetData.setSettlementFund(settlementFund);
|
||||||
|
return bitAssetData;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package cy.agorise.graphenej.models;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class used to represent the 'options' object returned inside the response obtained after
|
||||||
|
* querying for an object of type 'asset_bitasset_data' (2.4.x)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Options {
|
||||||
|
private long feed_lifetime_sec;
|
||||||
|
private long minimum_feeds;
|
||||||
|
private long force_settlement_delay_sec;
|
||||||
|
private long force_settlement_offset_percent;
|
||||||
|
private long maximum_force_settlement_volume;
|
||||||
|
private String short_backing_asset;
|
||||||
|
}
|
|
@ -122,6 +122,7 @@ public class GetObjectsTest extends BaseApiTest{
|
||||||
public void onSuccess(WitnessResponse response) {
|
public void onSuccess(WitnessResponse response) {
|
||||||
System.out.println("onSuccess");
|
System.out.println("onSuccess");
|
||||||
List<BitAssetData> list = (List<BitAssetData>) response.result;
|
List<BitAssetData> list = (List<BitAssetData>) response.result;
|
||||||
|
System.out.println("Response array length: "+list.size());
|
||||||
BitAssetData bitAssetData1 = list.get(0);
|
BitAssetData bitAssetData1 = list.get(0);
|
||||||
BitAssetData bitAssetData2 = list.get(1);
|
BitAssetData bitAssetData2 = list.get(1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue