VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS36.40%
Net Worth
3.533USD
STEEM
0.001STEEM
SBD
6.078SBD
Own SP
10.620SP
Detailed Balance
| STEEM | ||
| balance | 0.001STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 10.620SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 0.000SP | SP |
| Effective Power | 10.620SP | SP |
| Reward SP (pending) | 0.000SP | SP |
| SBD | ||
| sbd_balance | 6.078SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.000SBD | SBD |
{
"balance": "0.001 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "17273.827243 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"sbd_balance": "6.078 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | steven.tjg |
| id | 543019 |
| rank | 127,352 |
| reputation | 236470476775 |
| created | 2017-12-31T06:07:39 |
| recovery_account | steem |
| proxy | None |
| post_count | 23 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-02-19T04:12:45 |
| last_root_post | 2018-02-19T04:12:45 |
| last_vote_time | 2018-02-20T02:46:54 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.001 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 6.078 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 17273.827243 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-01-05T09:18:54 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 2018-02-20T00:09:42 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM68gq4qwGoFRu9cv9fmpxDikKD9pixNcTT32jWiWpoVPkVzkMFj",
1
]
],
"weight_threshold": 1
},
"balance": "0.001 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2017-12-31T06:07:39",
"curation_rewards": 192,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": "4318456810",
"last_update_time": 1588954137
},
"guest_bloggers": [],
"id": 543019,
"json_metadata": "{\"profile\":{\"name\":\"Steven\",\"location\":\"Indonesia\",\"profile_image\":\"https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2018-01-05T09:18:54",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2018-02-19T04:12:45",
"last_root_post": "2018-02-19T04:12:45",
"last_vote_time": "2018-02-20T02:46:54",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6yiWpqPcKUeo3ospn48DstZSJNGcHPyPZYyENWeyYDKnkeMeRZ",
"mined": false,
"name": "steven.tjg",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM5YecQd5WyTDm9i91wUKo5uYGo6NBEt4Xjm69spjspDZsaSfK78",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 23,
"post_history": [],
"posting": {
"account_auths": [
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM8JeGoZdBiDEyZ72Ayn8RewMY4t4Kxvwv3ZYECyECuRCZhNydFr",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"name\":\"Steven\",\"location\":\"Indonesia\",\"profile_image\":\"https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg\"}}",
"posting_rewards": 15502,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "0.000000 VESTS",
"recovery_account": "steem",
"reputation": "236470476775",
"reset_account": "null",
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_steem": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "6.078 SBD",
"sbd_last_interest_payment": "2018-02-20T00:09:42",
"sbd_seconds": "0",
"sbd_seconds_last_update": "2018-02-26T07:13:18",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "17273.827243 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "17273827243",
"last_update_time": 1588954137
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 127352
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
steemdelegated 0.000 SP to @steven.tjg2020/05/08 16:08:57
steemdelegated 0.000 SP to @steven.tjg
2020/05/08 16:08:57
| delegatee | steven.tjg |
| delegator | steem |
| vesting shares | 0.000000 VESTS |
| Transaction Info | Block #43201113/Trx df8458003c0de4a6cb4643995e711d5f3ad87db3 |
View Raw JSON Data
{
"block": 43201113,
"op": [
"delegate_vesting_shares",
{
"delegatee": "steven.tjg",
"delegator": "steem",
"vesting_shares": "0.000000 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T16:08:57",
"trx_id": "df8458003c0de4a6cb4643995e711d5f3ad87db3",
"trx_in_block": 24,
"virtual_op": 0
}2019/12/31 06:36:36
2019/12/31 06:36:36
| author | steemitboard |
| body | Congratulations @steven.tjg! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@steven.tjg/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@steven.tjg) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=steven.tjg)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-shimmer-load-in-android |
| permlink | steemitboard-notify-steventjg-20191231t063636000z |
| title | |
| Transaction Info | Block #39511488/Trx 4a20ec36bc6dc09e5842b27d6fb4f63590dfa143 |
View Raw JSON Data
{
"block": 39511488,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @steven.tjg! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@steven.tjg/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@steven.tjg) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=steven.tjg)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-shimmer-load-in-android",
"permlink": "steemitboard-notify-steventjg-20191231t063636000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-12-31T06:36:36",
"trx_id": "4a20ec36bc6dc09e5842b27d6fb4f63590dfa143",
"trx_in_block": 11,
"virtual_op": 0
}dtubesent 0.001 STEEM to @steven.tjg- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"2019/08/22 16:05:36
dtubesent 0.001 STEEM to @steven.tjg- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 16:05:36
| amount | 0.001 STEEM |
| from | dtube |
| memo | Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube |
| to | steven.tjg |
| Transaction Info | Block #35779321/Trx ccb39bde4542954e7f023d807791f3ce46ac589f |
View Raw JSON Data
{
"block": 35779321,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "dtube",
"memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
"to": "steven.tjg"
}
],
"op_in_trx": 0,
"timestamp": "2019-08-22T16:05:36",
"trx_id": "ccb39bde4542954e7f023d807791f3ce46ac589f",
"trx_in_block": 10,
"virtual_op": 0
}2018/12/31 08:04:00
2018/12/31 08:04:00
| author | steemitboard |
| body | Congratulations @steven.tjg! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@steven.tjg/birthday1.png</td><td>1 Year on Steemit</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@steven.tjg)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends-the-party-continues"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/kf4SJb.png"></a></td><td><a href="https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends-the-party-continues">Christmas Challenge - The party continues</a></td></tr></table> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-shimmer-load-in-android |
| permlink | steemitboard-notify-steventjg-20181231t080359000z |
| title | |
| Transaction Info | Block #29040087/Trx a944f105ac1ee6fdc3e81da27aa06443e71e3f2d |
View Raw JSON Data
{
"block": 29040087,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @steven.tjg! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@steven.tjg/birthday1.png</td><td>1 Year on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@steven.tjg)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends-the-party-continues\"><img src=\"https://steemitimages.com/64x128/http://i.cubeupload.com/kf4SJb.png\"></a></td><td><a href=\"https://steemit.com/christmas/@steemitboard/christmas-challenge-send-a-gift-to-to-your-friends-the-party-continues\">Christmas Challenge - The party continues</a></td></tr></table>\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-shimmer-load-in-android",
"permlink": "steemitboard-notify-steventjg-20181231t080359000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-12-31T08:04:00",
"trx_id": "a944f105ac1ee6fdc3e81da27aa06443e71e3f2d",
"trx_in_block": 7,
"virtual_op": 0
}steemdelegated 1.250 SP to @steven.tjg2018/05/28 08:59:21
steemdelegated 1.250 SP to @steven.tjg
2018/05/28 08:59:21
| delegatee | steven.tjg |
| delegator | steem |
| vesting shares | 2033.619776 VESTS |
| Transaction Info | Block #22821460/Trx 8092d195e52a8705ee509ed13a1aac4cdb3b4408 |
View Raw JSON Data
{
"block": 22821460,
"op": [
"delegate_vesting_shares",
{
"delegatee": "steven.tjg",
"delegator": "steem",
"vesting_shares": "2033.619776 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-28T08:59:21",
"trx_id": "8092d195e52a8705ee509ed13a1aac4cdb3b4408",
"trx_in_block": 25,
"virtual_op": 0
}deusdecomboserupvoted (100.00%) @steven.tjg / rugcmill2018/03/04 20:07:54
deusdecomboserupvoted (100.00%) @steven.tjg / rugcmill
2018/03/04 20:07:54
| author | steven.tjg |
| permlink | rugcmill |
| voter | deusdecomboser |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20389535/Trx 149f20e7c9ee6b38c606c980778973f04255355c |
View Raw JSON Data
{
"block": 20389535,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "rugcmill",
"voter": "deusdecomboser",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-04T20:07:54",
"trx_id": "149f20e7c9ee6b38c606c980778973f04255355c",
"trx_in_block": 2,
"virtual_op": 0
}deusdecomboserupvoted (100.00%) @steven.tjg / rugcmill2018/03/04 20:07:48
deusdecomboserupvoted (100.00%) @steven.tjg / rugcmill
2018/03/04 20:07:48
| author | steven.tjg |
| permlink | rugcmill |
| voter | deusdecomboser |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20389533/Trx 76a4cc3a879fd894e85c960f3eb880c82e25bf45 |
View Raw JSON Data
{
"block": 20389533,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "rugcmill",
"voter": "deusdecomboser",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-03-04T20:07:48",
"trx_id": "76a4cc3a879fd894e85c960f3eb880c82e25bf45",
"trx_in_block": 44,
"virtual_op": 0
}steemdelegated 8.224 SP to @steven.tjg2018/02/26 08:24:12
steemdelegated 8.224 SP to @steven.tjg
2018/02/26 08:24:12
| delegatee | steven.tjg |
| delegator | steem |
| vesting shares | 13376.086340 VESTS |
| Transaction Info | Block #20202886/Trx d455b369d43418651beb2157f563899a169b5fde |
View Raw JSON Data
{
"block": 20202886,
"op": [
"delegate_vesting_shares",
{
"delegatee": "steven.tjg",
"delegator": "steem",
"vesting_shares": "13376.086340 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T08:24:12",
"trx_id": "d455b369d43418651beb2157f563899a169b5fde",
"trx_in_block": 23,
"virtual_op": 0
}steven.tjgclaimed reward balance: 6.078 SBD, 2.309 SP2018/02/26 07:13:18
steven.tjgclaimed reward balance: 6.078 SBD, 2.309 SP
2018/02/26 07:13:18
| account | steven.tjg |
| reward sbd | 6.078 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 3755.688095 VESTS |
| Transaction Info | Block #20201468/Trx 131fb25381f88be62325a013c1894dedf5f84a36 |
View Raw JSON Data
{
"block": 20201468,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "6.078 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "3755.688095 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T07:13:18",
"trx_id": "131fb25381f88be62325a013c1894dedf5f84a36",
"trx_in_block": 65,
"virtual_op": 0
}steven.tjgreceived 6.078 SBD, 2.309 SP author reward for @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/26 04:12:45
steven.tjgreceived 6.078 SBD, 2.309 SP author reward for @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/26 04:12:45
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| sbd payout | 6.078 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 3755.688095 VESTS |
| Transaction Info | Block #20197856/Virtual Operation #15 |
View Raw JSON Data
{
"block": 20197856,
"op": [
"author_reward",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"sbd_payout": "6.078 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "3755.688095 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T04:12:45",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 15
}utopian.payreceived 1.539 SP benefactor reward from @steven.tjg2018/02/26 04:12:45
utopian.payreceived 1.539 SP benefactor reward from @steven.tjg
2018/02/26 04:12:45
| author | steven.tjg |
| benefactor | utopian.pay |
| permlink | how-to-implement-shimmer-load-in-android |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 2503.110945 VESTS |
| Transaction Info | Block #20197856/Virtual Operation #14 |
View Raw JSON Data
{
"block": 20197856,
"op": [
"comment_benefactor_reward",
{
"author": "steven.tjg",
"benefactor": "utopian.pay",
"permlink": "how-to-implement-shimmer-load-in-android",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "2503.110945 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T04:12:45",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 14
}steven.tjgclaimed reward balance: 0.003 SP2018/02/26 03:27:27
steven.tjgclaimed reward balance: 0.003 SP
2018/02/26 03:27:27
| account | steven.tjg |
| reward sbd | 0.000 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 4.087190 VESTS |
| Transaction Info | Block #20196951/Trx 6d8cc47e17f1313233f33feb0b548a3ac700ace7 |
View Raw JSON Data
{
"block": 20196951,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "0.000 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "4.087190 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-26T03:27:27",
"trx_id": "6d8cc47e17f1313233f33feb0b548a3ac700ace7",
"trx_in_block": 7,
"virtual_op": 0
}steven.tjgreceived 0.001 SP curation reward for @alfarisi94 / how-to-use-database-eloquent-in-slim2018/02/24 11:32:09
steven.tjgreceived 0.001 SP curation reward for @alfarisi94 / how-to-use-database-eloquent-in-slim
2018/02/24 11:32:09
| comment author | alfarisi94 |
| comment permlink | how-to-use-database-eloquent-in-slim |
| curator | steven.tjg |
| reward | 2.043538 VESTS |
| Transaction Info | Block #20149062/Virtual Operation #25 |
View Raw JSON Data
{
"block": 20149062,
"op": [
"curation_reward",
{
"comment_author": "alfarisi94",
"comment_permlink": "how-to-use-database-eloquent-in-slim",
"curator": "steven.tjg",
"reward": "2.043538 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-24T11:32:09",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 25
}steven.tjgreceived 0.001 SP curation reward for @alfarisi94 / how-to-use-twig-templating-in-slim2018/02/23 10:21:18
steven.tjgreceived 0.001 SP curation reward for @alfarisi94 / how-to-use-twig-templating-in-slim
2018/02/23 10:21:18
| comment author | alfarisi94 |
| comment permlink | how-to-use-twig-templating-in-slim |
| curator | steven.tjg |
| reward | 2.043652 VESTS |
| Transaction Info | Block #20118849/Virtual Operation #114 |
View Raw JSON Data
{
"block": 20118849,
"op": [
"curation_reward",
{
"comment_author": "alfarisi94",
"comment_permlink": "how-to-use-twig-templating-in-slim",
"curator": "steven.tjg",
"reward": "2.043652 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-23T10:21:18",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 114
}2018/02/20 20:18:24
2018/02/20 20:18:24
| author | utopian-io |
| body | ### Hey @steven.tjg I am @utopian-io. I have just upvoted you! #### Achievements - You have less than 500 followers. Just gave you a gift to help you succeed! - Seems like you contribute quite often. AMAZING! #### Suggestions - Contribute more often to get higher and higher rewards. I wish to see you often! - Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck! #### Get Noticed! - Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions! #### Community-Driven Witness! I am the first and only Steem Community-Driven Witness. <a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER! - <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness With SteemConnect</a> - <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness with SteemConnect</a> - Or vote/proxy on <a href="https://steemit.com/~witnesses">Steemit Witnesses</a> [](https://steemit.com/~witnesses) **Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-shimmer-load-in-android |
| permlink | re-steventjg-how-to-implement-shimmer-load-in-android-20180220t201824458z |
| title | |
| Transaction Info | Block #20044405/Trx 71ff728647a9d16cd67f6c6d6341f2d676dae5ec |
View Raw JSON Data
{
"block": 20044405,
"op": [
"comment",
{
"author": "utopian-io",
"body": "### Hey @steven.tjg I am @utopian-io. I have just upvoted you!\n#### Achievements\n- You have less than 500 followers. Just gave you a gift to help you succeed!\n- Seems like you contribute quite often. AMAZING!\n#### Suggestions\n- Contribute more often to get higher and higher rewards. I wish to see you often!\n- Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!\n#### Get Noticed!\n- Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!\n#### Community-Driven Witness!\nI am the first and only Steem Community-Driven Witness. <a href=\"https://discord.gg/zTrEMqB\">Participate on Discord</a>. Lets GROW TOGETHER!\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1\">Vote for my Witness With SteemConnect</a>\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1\">Proxy vote to Utopian Witness with SteemConnect</a>\n- Or vote/proxy on <a href=\"https://steemit.com/~witnesses\">Steemit Witnesses</a>\n\n[](https://steemit.com/~witnesses)\n\n**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-shimmer-load-in-android",
"permlink": "re-steventjg-how-to-implement-shimmer-load-in-android-20180220t201824458z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T20:18:24",
"trx_id": "71ff728647a9d16cd67f6c6d6341f2d676dae5ec",
"trx_in_block": 20,
"virtual_op": 0
}utopian-ioupvoted (2.57%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/20 20:18:21
utopian-ioupvoted (2.57%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/20 20:18:21
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | utopian-io |
| weight | 257 (2.57%) |
| Transaction Info | Block #20044404/Trx a1d661086d7e9f4122baf6e6a288a8930a880b02 |
View Raw JSON Data
{
"block": 20044404,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "utopian-io",
"weight": 257
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T20:18:21",
"trx_id": "a1d661086d7e9f4122baf6e6a288a8930a880b02",
"trx_in_block": 30,
"virtual_op": 0
}kennethzupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/20 08:37:00
kennethzupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/20 08:37:00
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | kennethz |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20030378/Trx 1baf704bf7aa7647c82b100a8faa9d5170a7bc6c |
View Raw JSON Data
{
"block": 20030378,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "kennethz",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:37:00",
"trx_id": "1baf704bf7aa7647c82b100a8faa9d5170a7bc6c",
"trx_in_block": 10,
"virtual_op": 0
}2018/02/20 02:46:54
2018/02/20 02:46:54
| author | auliausu |
| permlink | kok-reward-postinganku-gak-naik-naik-ya-dear-steemians-mari-berbincang |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20023377/Trx 66344bf9d227c829b70bc1f47ea0263d8a76b5e4 |
View Raw JSON Data
{
"block": 20023377,
"op": [
"vote",
{
"author": "auliausu",
"permlink": "kok-reward-postinganku-gak-naik-naik-ya-dear-steemians-mari-berbincang",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T02:46:54",
"trx_id": "66344bf9d227c829b70bc1f47ea0263d8a76b5e4",
"trx_in_block": 35,
"virtual_op": 0
}steven.tjgsent 15.023 SBD to @blocktrades- "9ef7071f-3275-4d7b-9e18-623e74961ceb"2018/02/20 00:09:42
steven.tjgsent 15.023 SBD to @blocktrades- "9ef7071f-3275-4d7b-9e18-623e74961ceb"
2018/02/20 00:09:42
| amount | 15.023 SBD |
| from | steven.tjg |
| memo | 9ef7071f-3275-4d7b-9e18-623e74961ceb |
| to | blocktrades |
| Transaction Info | Block #20020233/Trx 4c92528556501a3bf461fbdff613c851e2005dd6 |
View Raw JSON Data
{
"block": 20020233,
"op": [
"transfer",
{
"amount": "15.023 SBD",
"from": "steven.tjg",
"memo": "9ef7071f-3275-4d7b-9e18-623e74961ceb",
"to": "blocktrades"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T00:09:42",
"trx_id": "4c92528556501a3bf461fbdff613c851e2005dd6",
"trx_in_block": 54,
"virtual_op": 0
}ciferupvoted (80.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/19 23:37:42
ciferupvoted (80.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/19 23:37:42
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | cifer |
| weight | 8000 (80.00%) |
| Transaction Info | Block #20019593/Trx 6f24b30b258ba054af4ef722924f0cef8b2b43aa |
View Raw JSON Data
{
"block": 20019593,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "cifer",
"weight": 8000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T23:37:42",
"trx_id": "6f24b30b258ba054af4ef722924f0cef8b2b43aa",
"trx_in_block": 25,
"virtual_op": 0
}2018/02/19 23:36:51
2018/02/19 23:36:51
| author | creon |
| body | Thank you for the contribution. It has been approved. You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-shimmer-load-in-android |
| permlink | re-steventjg-how-to-implement-shimmer-load-in-android-20180219t233651446z |
| title | |
| Transaction Info | Block #20019576/Trx dfec95837d3a76f449a8b11b3c392e63512ee1ae |
View Raw JSON Data
{
"block": 20019576,
"op": [
"comment",
{
"author": "creon",
"body": "Thank you for the contribution. It has been approved.\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-shimmer-load-in-android",
"permlink": "re-steventjg-how-to-implement-shimmer-load-in-android-20180219t233651446z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T23:36:51",
"trx_id": "dfec95837d3a76f449a8b11b3c392e63512ee1ae",
"trx_in_block": 34,
"virtual_op": 0
}steven.tjgpublished a new post: how-to-implement-shimmer-load-in-android2018/02/19 23:36:33
steven.tjgpublished a new post: how-to-implement-shimmer-load-in-android
2018/02/19 23:36:33
| author | steven.tjg |
| body |  <br> <a href="http://facebook.github.io/shimmer-android/">Facebook Shimmer</a> Hi, in this post, I will show you how to implement Shimmer Load in Android application. After reading this post hopefully you can implement shimmer load in your Android project. Alright let's get started. #### What Will I Learn? - Logic of how shimmer load works. - Implement shimmer load in your project. #### Requirements - Android Studio - Knowledge of Java #### Difficulty - Basic #### Tutorial Contents So maybe you are wondering, what exactly is shimmer load. This is a screenshot of Youtube apps on iOS.  Shimmer load is basically a placeholder that is shown when your apps is loading, for example when fetching data from an API. <br> There are a lot of shimmer load library which works a bit different, but in this post I will be using a library from Facebook called <a href="https://github.com/facebook/shimmer-android">shimmer-android</a>. <br> The logic behind facebook shimmer load is basically switching view between two layout. In Android it is basically playing with layout visibility. <br><br> In this tutorial, I will make an example of searching movie data from imdb API. #### Curriculum #### 1. Install Dependency To install this dependency, simply add `implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'` in your application `build.gradle` file. <br> This is my entire build.gradle file: ``` apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { applicationId "com.steven.example.shimmerloadexample" minSdkVersion 19 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.0.2' implementation "com.android.support:recyclerview-v7:27.0.2" implementation 'com.facebook.shimmer:shimmer:0.1.0@aar' implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1' implementation 'com.github.bumptech.glide:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } ``` #### 2. Create A Placeholder The next thing is creating a placeholder for the shimmer load. For the movie list item I will have the end result looks like this: <br>  <br> So we need to create the place holder similar to our list item. The place holder I made looks like this: <br>  <br> This is my entire placeholder file with background colorShimmer #DDDDDD: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="160dp"> <View android:id="@+id/view_image" android:layout_width="120dp" android:layout_height="match_parent" android:layout_margin="8dp" android:background="@color/colorShimmer" /> <View android:id="@+id/view_title" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:layout_toEndOf="@+id/view_image" android:background="@color/colorShimmer" /> <View android:layout_width="80dp" android:layout_height="24dp" android:layout_above="@id/view_type" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:background="@color/colorShimmer" /> <View android:id="@+id/view_type" android:layout_width="160dp" android:layout_height="24dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:background="@color/colorShimmer" /> </RelativeLayout> ``` #### 3. Use Placeholder Now it's time to use the placeholder that we've created. In your activity/fragment layout add ShimmerFrameLayout with the place holder inside it. In my example I have ShimmerFrameLayout and RecyclerView, when fetching data ShimmerFrameLayout will be shown and starts its animaton, and RecyclerView will be hide. Once all the data has been fetch and added to RecyclerView, RecyclerView will be shown, and ShimmerFrameLayout will be hide and stop its animation. <br> My `activity_main.xml` file looks like this: <br> ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:shimmer="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical" tools:context="com.steven.example.shimmerloadexample.ui.MainActivity"> <android.support.v7.widget.SearchView android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:theme="@style/Theme.AppCompat.Light" app:queryHint="Search here" /> <com.facebook.shimmer.ShimmerFrameLayout android:id="@+id/shimmer_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" shimmer:duration="800"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> </LinearLayout> </com.facebook.shimmer.ShimmerFrameLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> ``` And my 'MainActivity.java' looks like this: ``` public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private SearchView mSearchView; private ShimmerFrameLayout mShimmerLayout; private RecyclerView mRecyclerView; private RecyclerViewAdapter mAdapter; private List<Movie> mMovieList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSearchView = findViewById(R.id.search_view); mShimmerLayout = findViewById(R.id.shimmer_layout); mRecyclerView = findViewById(R.id.recycler_view); mSearchView.setIconified(false); mMovieList = new ArrayList<>(); mAdapter = new RecyclerViewAdapter(this); mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); mRecyclerView.setAdapter(mAdapter); mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { fetchData(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); } @Override protected void onPause() { super.onPause(); mShimmerLayout.stopShimmerAnimation(); } private void fetchData() { mShimmerLayout.setVisibility(View.VISIBLE); mShimmerLayout.startShimmerAnimation(); String keyword = mSearchView.getQuery().toString(); keyword = keyword.replace(" ", "+"); RetrofitSingleton.getInstance().getRestAPI().searchTitle(keyword, 1, Config.API_KEY).enqueue(new Callback<SearchMovie>() { @SuppressWarnings("ConstantConditions") @Override public void onResponse(@NonNull Call<SearchMovie> call, @NonNull Response<SearchMovie> response) { if (response.isSuccessful()) { mMovieList = response.body().Search; mAdapter.addItems(mMovieList); mAdapter.notifyDataSetChanged(); mShimmerLayout.stopShimmerAnimation(); mShimmerLayout.setVisibility(View.GONE); mRecyclerView.smoothScrollToPosition(0); } } @Override public void onFailure(@NonNull Call<SearchMovie> call, @NonNull Throwable t) { if (!call.isCanceled()) { t.printStackTrace(); } mShimmerLayout.stopShimmerAnimation(); } }); } } ``` #### 4. Final Result Now let's look at the result. <br>  <br> In my example I have a search view. Let's try and search "black panther", once I press enter on the keyboard it will run `fetchData();` and inside it I have set the visibility of ShimmerFrameLayout to visible and start its animation. <br>  <br><br> Once 'fetchData();` response is successful and data has been added into RecyclerViewAdapter, ShimmerFrameLayout visibility will be set to gone and animation will be stop. <br>  #### Documentation - You can check out facebook shimmer load library here: https://github.com/facebook/shimmer-android - If you want to check out the example I made in this post, you can visit here: https://github.com/steven-tjg/shimmering-load-example <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@steven.tjg/how-to-implement-shimmer-load-in-android">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":31441862,"name":"shimmer-android","full_name":"facebook/shimmer-android","html_url":"https://github.com/facebook/shimmer-android","fork":false,"owner":{"login":"facebook"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","android","shimmer-load"],"users":["aar","color","id","android","style","layout","Override","SuppressWarnings","NonNull"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png"],"moderator":{"account":"creon","time":"2018-02-19T23:36:33.392Z","reviewed":true,"pending":false,"flagged":false},"questions":[],"score":0} |
| parent author | |
| parent permlink | utopian-io |
| permlink | how-to-implement-shimmer-load-in-android |
| title | How to Implement Shimmer Load in Android |
| Transaction Info | Block #20019570/Trx 57adfd9f8ed30656b08b4eefde91c501671cf5b0 |
View Raw JSON Data
{
"block": 20019570,
"op": [
"comment",
{
"author": "steven.tjg",
"body": "\n<br>\n<a href=\"http://facebook.github.io/shimmer-android/\">Facebook Shimmer</a>\n\nHi, in this post, I will show you how to implement Shimmer Load in Android application. After reading this post hopefully you can implement shimmer load in your Android project. Alright let's get started.\n\n#### What Will I Learn?\n- Logic of how shimmer load works.\n- Implement shimmer load in your project.\n\n#### Requirements\n- Android Studio\n- Knowledge of Java\n\n#### Difficulty\n- Basic\n\n#### Tutorial Contents\nSo maybe you are wondering, what exactly is shimmer load. This is a screenshot of Youtube apps on iOS.\n\nShimmer load is basically a placeholder that is shown when your apps is loading, for example when fetching data from an API.\n<br>\nThere are a lot of shimmer load library which works a bit different, but in this post I will be using a library from Facebook called <a href=\"https://github.com/facebook/shimmer-android\">shimmer-android</a>.\n<br>\nThe logic behind facebook shimmer load is basically switching view between two layout. In Android it is basically playing with layout visibility.\n<br><br>\nIn this tutorial, I will make an example of searching movie data from imdb API.\n\n#### Curriculum\n#### 1. Install Dependency\nTo install this dependency, simply add `implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'` in your application `build.gradle` file.\n<br>\nThis is my entire build.gradle file:\n```\napply plugin: 'com.android.application'\nandroid {\n compileSdkVersion 27\n buildToolsVersion '27.0.3'\n defaultConfig {\n applicationId \"com.steven.example.shimmerloadexample\"\n minSdkVersion 19\n targetSdkVersion 27\n versionCode 1\n versionName \"1.0\"\n testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n }\n buildTypes {\n debug {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n release {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n }\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_1_8\n targetCompatibility JavaVersion.VERSION_1_8\n }\n}\ndependencies {\n implementation fileTree(include: ['*.jar'], dir: 'libs')\n implementation 'com.android.support:appcompat-v7:27.0.2'\n implementation \"com.android.support:recyclerview-v7:27.0.2\"\n implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'\n implementation 'com.squareup.retrofit2:retrofit:2.3.0'\n implementation 'com.squareup.retrofit2:converter-gson:2.3.0'\n implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'\n implementation 'com.github.bumptech.glide:glide:4.6.1'\n annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'\n testImplementation 'junit:junit:4.12'\n androidTestImplementation 'com.android.support.test:runner:1.0.1'\n androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'\n}\n```\n\n#### 2. Create A Placeholder\nThe next thing is creating a placeholder for the shimmer load. For the movie list item I will have the end result looks like this:\n<br>\n\n<br>\nSo we need to create the place holder similar to our list item. The place holder I made looks like this:\n<br>\n\n<br>\nThis is my entire placeholder file with background colorShimmer #DDDDDD:\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"160dp\">\n\n <View\n android:id=\"@+id/view_image\"\n android:layout_width=\"120dp\"\n android:layout_height=\"match_parent\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:id=\"@+id/view_title\"\n android:layout_width=\"wrap_content\"\n android:layout_height=\"48dp\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:layout_toEndOf=\"@+id/view_image\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:layout_width=\"80dp\"\n android:layout_height=\"24dp\"\n android:layout_above=\"@id/view_type\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:id=\"@+id/view_type\"\n android:layout_width=\"160dp\"\n android:layout_height=\"24dp\"\n android:layout_alignParentBottom=\"true\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n</RelativeLayout>\n```\n\n#### 3. Use Placeholder\nNow it's time to use the placeholder that we've created. In your activity/fragment layout add ShimmerFrameLayout with the place holder inside it. In my example I have ShimmerFrameLayout and RecyclerView, when fetching data ShimmerFrameLayout will be shown and starts its animaton, and RecyclerView will be hide. Once all the data has been fetch and added to RecyclerView, RecyclerView will be shown, and ShimmerFrameLayout will be hide and stop its animation.\n<br>\nMy `activity_main.xml` file looks like this:\n<br>\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n xmlns:shimmer=\"http://schemas.android.com/apk/res-auto\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\n android:background=\"@android:color/white\"\n android:orientation=\"vertical\"\n tools:context=\"com.steven.example.shimmerloadexample.ui.MainActivity\">\n\n <android.support.v7.widget.SearchView\n android:id=\"@+id/search_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:focusable=\"true\"\n android:focusableInTouchMode=\"true\"\n android:theme=\"@style/Theme.AppCompat.Light\"\n app:queryHint=\"Search here\" />\n\n <com.facebook.shimmer.ShimmerFrameLayout\n android:id=\"@+id/shimmer_layout\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:visibility=\"gone\"\n shimmer:duration=\"800\">\n\n <LinearLayout\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:orientation=\"vertical\">\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n </LinearLayout>\n\n </com.facebook.shimmer.ShimmerFrameLayout>\n\n <android.support.v7.widget.RecyclerView\n android:id=\"@+id/recycler_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\" />\n\n</LinearLayout>\n```\n\nAnd my 'MainActivity.java' looks like this:\n```\npublic class MainActivity extends AppCompatActivity {\n\n private static final String TAG = MainActivity.class.getSimpleName();\n\n private SearchView mSearchView;\n private ShimmerFrameLayout mShimmerLayout;\n private RecyclerView mRecyclerView;\n private RecyclerViewAdapter mAdapter;\n private List<Movie> mMovieList;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n mSearchView = findViewById(R.id.search_view);\n mShimmerLayout = findViewById(R.id.shimmer_layout);\n mRecyclerView = findViewById(R.id.recycler_view);\n\n mSearchView.setIconified(false);\n\n mMovieList = new ArrayList<>();\n mAdapter = new RecyclerViewAdapter(this);\n mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));\n mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));\n mRecyclerView.setAdapter(mAdapter);\n\n mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {\n @Override\n public boolean onQueryTextSubmit(String query) {\n fetchData();\n return false;\n }\n\n @Override\n public boolean onQueryTextChange(String newText) {\n return false;\n }\n });\n }\n\n @Override\n protected void onPause() {\n super.onPause();\n mShimmerLayout.stopShimmerAnimation();\n }\n\n private void fetchData() {\n mShimmerLayout.setVisibility(View.VISIBLE);\n mShimmerLayout.startShimmerAnimation();\n String keyword = mSearchView.getQuery().toString();\n keyword = keyword.replace(\" \", \"+\");\n RetrofitSingleton.getInstance().getRestAPI().searchTitle(keyword, 1, Config.API_KEY).enqueue(new Callback<SearchMovie>() {\n @SuppressWarnings(\"ConstantConditions\")\n @Override\n public void onResponse(@NonNull Call<SearchMovie> call, @NonNull Response<SearchMovie> response) {\n if (response.isSuccessful()) {\n mMovieList = response.body().Search;\n mAdapter.addItems(mMovieList);\n mAdapter.notifyDataSetChanged();\n mShimmerLayout.stopShimmerAnimation();\n mShimmerLayout.setVisibility(View.GONE);\n mRecyclerView.smoothScrollToPosition(0);\n }\n }\n\n @Override\n public void onFailure(@NonNull Call<SearchMovie> call, @NonNull Throwable t) {\n if (!call.isCanceled()) {\n t.printStackTrace();\n }\n mShimmerLayout.stopShimmerAnimation();\n }\n });\n }\n}\n```\n\n#### 4. Final Result\nNow let's look at the result.\n<br>\n\n<br>\nIn my example I have a search view. Let's try and search \"black panther\", once I press enter on the keyboard it will run `fetchData();` and inside it I have set the visibility of ShimmerFrameLayout to visible and start its animation.\n<br>\n\n<br><br>\nOnce 'fetchData();` response is successful and data has been added into RecyclerViewAdapter, ShimmerFrameLayout visibility will be set to gone and animation will be stop.\n<br>\n\n\n#### Documentation\n- You can check out facebook shimmer load library here: https://github.com/facebook/shimmer-android\n- If you want to check out the example I made in this post, you can visit here: https://github.com/steven-tjg/shimmering-load-example\n \n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@steven.tjg/how-to-implement-shimmer-load-in-android\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":31441862,\"name\":\"shimmer-android\",\"full_name\":\"facebook/shimmer-android\",\"html_url\":\"https://github.com/facebook/shimmer-android\",\"fork\":false,\"owner\":{\"login\":\"facebook\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"android\",\"shimmer-load\"],\"users\":[\"aar\",\"color\",\"id\",\"android\",\"style\",\"layout\",\"Override\",\"SuppressWarnings\",\"NonNull\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png\"],\"moderator\":{\"account\":\"creon\",\"time\":\"2018-02-19T23:36:33.392Z\",\"reviewed\":true,\"pending\":false,\"flagged\":false},\"questions\":[],\"score\":0}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "how-to-implement-shimmer-load-in-android",
"title": "How to Implement Shimmer Load in Android"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T23:36:33",
"trx_id": "57adfd9f8ed30656b08b4eefde91c501671cf5b0",
"trx_in_block": 51,
"virtual_op": 0
}2018/02/19 15:41:39
2018/02/19 15:41:39
| author | auliausu |
| permlink | first-indonesian-steemian-national-meetup-sejarah-dalam-keceriaan-cimahi-16-februari-2018 |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20010094/Trx e0df74312e9b33380882f39bad1376f69f773cb9 |
View Raw JSON Data
{
"block": 20010094,
"op": [
"vote",
{
"author": "auliausu",
"permlink": "first-indonesian-steemian-national-meetup-sejarah-dalam-keceriaan-cimahi-16-februari-2018",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T15:41:39",
"trx_id": "e0df74312e9b33380882f39bad1376f69f773cb9",
"trx_in_block": 38,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/19 06:53:57
steven.tjgupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/19 06:53:57
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19999542/Trx 9904ce10ba85d11c5db8c6f1e72a38b1c023d110 |
View Raw JSON Data
{
"block": 19999542,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T06:53:57",
"trx_id": "9904ce10ba85d11c5db8c6f1e72a38b1c023d110",
"trx_in_block": 22,
"virtual_op": 0
}murez-nstupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/19 04:38:24
murez-nstupvoted (100.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/19 04:38:24
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | murez-nst |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19996831/Trx 47b6c5c38f6427617a6973f8f67ba12717f40d80 |
View Raw JSON Data
{
"block": 19996831,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "murez-nst",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:38:24",
"trx_id": "47b6c5c38f6427617a6973f8f67ba12717f40d80",
"trx_in_block": 1,
"virtual_op": 0
}teamupvoted (10.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/19 04:31:15
teamupvoted (10.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/19 04:31:15
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | team |
| weight | 1000 (10.00%) |
| Transaction Info | Block #19996688/Trx 4ca49b1889b6ebfa93ec56df95920a020806471a |
View Raw JSON Data
{
"block": 19996688,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "team",
"weight": 1000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:31:15",
"trx_id": "4ca49b1889b6ebfa93ec56df95920a020806471a",
"trx_in_block": 44,
"virtual_op": 0
}steemitstatsreplied to @steven.tjg / 20180219t041541684z-post2018/02/19 04:15:45
steemitstatsreplied to @steven.tjg / 20180219t041541684z-post
2018/02/19 04:15:45
| author | steemitstats |
| body | @steven.tjg, Contribution to open source project, I like you and upvote. |
| json metadata | {"tags":["utopian-io"]} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-shimmer-load-in-android |
| permlink | 20180219t041541684z-post |
| title | |
| Transaction Info | Block #19996378/Trx 49ac6a22c9da6f43a9449330368821069ea22b60 |
View Raw JSON Data
{
"block": 19996378,
"op": [
"comment",
{
"author": "steemitstats",
"body": "@steven.tjg, Contribution to open source project, I like you and upvote.",
"json_metadata": "{\"tags\":[\"utopian-io\"]}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-shimmer-load-in-android",
"permlink": "20180219t041541684z-post",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:15:45",
"trx_id": "49ac6a22c9da6f43a9449330368821069ea22b60",
"trx_in_block": 25,
"virtual_op": 0
}steemitstatsupvoted (5.00%) @steven.tjg / how-to-implement-shimmer-load-in-android2018/02/19 04:15:42
steemitstatsupvoted (5.00%) @steven.tjg / how-to-implement-shimmer-load-in-android
2018/02/19 04:15:42
| author | steven.tjg |
| permlink | how-to-implement-shimmer-load-in-android |
| voter | steemitstats |
| weight | 500 (5.00%) |
| Transaction Info | Block #19996377/Trx 9d1ba41cd62d381db6e7d9249be4b50aab3cffe9 |
View Raw JSON Data
{
"block": 19996377,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-shimmer-load-in-android",
"voter": "steemitstats",
"weight": 500
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:15:42",
"trx_id": "9d1ba41cd62d381db6e7d9249be4b50aab3cffe9",
"trx_in_block": 4,
"virtual_op": 0
}steven.tjgupdated options for how-to-implement-shimmer-load-in-android2018/02/19 04:12:45
steven.tjgupdated options for how-to-implement-shimmer-load-in-android
2018/02/19 04:12:45
| allow curation rewards | true |
| allow votes | true |
| author | steven.tjg |
| extensions | [[0,{"beneficiaries":[{"account":"utopian.pay","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | how-to-implement-shimmer-load-in-android |
| Transaction Info | Block #19996318/Trx 19776a80a178e5bfd013b23246ce8ab9604300dc |
View Raw JSON Data
{
"block": 19996318,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "steven.tjg",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "utopian.pay",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "how-to-implement-shimmer-load-in-android"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:12:45",
"trx_id": "19776a80a178e5bfd013b23246ce8ab9604300dc",
"trx_in_block": 42,
"virtual_op": 0
}steven.tjgpublished a new post: how-to-implement-shimmer-load-in-android2018/02/19 04:12:45
steven.tjgpublished a new post: how-to-implement-shimmer-load-in-android
2018/02/19 04:12:45
| author | steven.tjg |
| body |  <br> <a href="http://facebook.github.io/shimmer-android/">Facebook Shimmer</a> Hi, in this post, I will show you how to implement Shimmer Load in Android application. After reading this post hopefully you can implement shimmer load in your Android project. Alright let's get started. #### What Will I Learn? - Logic of how shimmer load works. - Implement shimmer load in your project. #### Requirements - Android Studio - Knowledge of Java #### Difficulty - Basic #### Tutorial Contents So maybe you are wondering, what exactly is shimmer load. This is a screenshot of Youtube apps on iOS.  Shimmer load is basically a placeholder that is shown when your apps is loading, for example when fetching data from an API. <br> There are a lot of shimmer load library which works a bit different, but in this post I will be using a library from Facebook called <a href="https://github.com/facebook/shimmer-android">shimmer-android</a>. <br> The logic behind facebook shimmer load is basically switching view between two layout. In Android it is basically playing with layout visibility. <br><br> In this tutorial, I will make an example of searching movie data from imdb API. #### Curriculum #### 1. Install Dependency To install this dependency, simply add `implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'` in your application `build.gradle` file. <br> This is my entire build.gradle file: ``` apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { applicationId "com.steven.example.shimmerloadexample" minSdkVersion 19 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.0.2' implementation "com.android.support:recyclerview-v7:27.0.2" implementation 'com.facebook.shimmer:shimmer:0.1.0@aar' implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1' implementation 'com.github.bumptech.glide:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } ``` #### 2. Create A Placeholder The next thing is creating a placeholder for the shimmer load. For the movie list item I will have the end result looks like this: <br>  <br> So we need to create the place holder similar to our list item. The place holder I made looks like this: <br>  <br> This is my entire placeholder file with background colorShimmer #DDDDDD: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="160dp"> <View android:id="@+id/view_image" android:layout_width="120dp" android:layout_height="match_parent" android:layout_margin="8dp" android:background="@color/colorShimmer" /> <View android:id="@+id/view_title" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:layout_toEndOf="@+id/view_image" android:background="@color/colorShimmer" /> <View android:layout_width="80dp" android:layout_height="24dp" android:layout_above="@id/view_type" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:background="@color/colorShimmer" /> <View android:id="@+id/view_type" android:layout_width="160dp" android:layout_height="24dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_margin="8dp" android:background="@color/colorShimmer" /> </RelativeLayout> ``` #### 3. Use Placeholder Now it's time to use the placeholder that we've created. In your activity/fragment layout add ShimmerFrameLayout with the place holder inside it. In my example I have ShimmerFrameLayout and RecyclerView, when fetching data ShimmerFrameLayout will be shown and starts its animaton, and RecyclerView will be hide. Once all the data has been fetch and added to RecyclerView, RecyclerView will be shown, and ShimmerFrameLayout will be hide and stop its animation. <br> My `activity_main.xml` file looks like this: <br> ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:shimmer="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical" tools:context="com.steven.example.shimmerloadexample.ui.MainActivity"> <android.support.v7.widget.SearchView android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:theme="@style/Theme.AppCompat.Light" app:queryHint="Search here" /> <com.facebook.shimmer.ShimmerFrameLayout android:id="@+id/shimmer_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" shimmer:duration="800"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> <include layout="@layout/shimmer_placeholder" /> </LinearLayout> </com.facebook.shimmer.ShimmerFrameLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> ``` And my 'MainActivity.java' looks like this: ``` public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private SearchView mSearchView; private ShimmerFrameLayout mShimmerLayout; private RecyclerView mRecyclerView; private RecyclerViewAdapter mAdapter; private List<Movie> mMovieList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSearchView = findViewById(R.id.search_view); mShimmerLayout = findViewById(R.id.shimmer_layout); mRecyclerView = findViewById(R.id.recycler_view); mSearchView.setIconified(false); mMovieList = new ArrayList<>(); mAdapter = new RecyclerViewAdapter(this); mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); mRecyclerView.setAdapter(mAdapter); mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { fetchData(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); } @Override protected void onPause() { super.onPause(); mShimmerLayout.stopShimmerAnimation(); } private void fetchData() { mShimmerLayout.setVisibility(View.VISIBLE); mShimmerLayout.startShimmerAnimation(); String keyword = mSearchView.getQuery().toString(); keyword = keyword.replace(" ", "+"); RetrofitSingleton.getInstance().getRestAPI().searchTitle(keyword, 1, Config.API_KEY).enqueue(new Callback<SearchMovie>() { @SuppressWarnings("ConstantConditions") @Override public void onResponse(@NonNull Call<SearchMovie> call, @NonNull Response<SearchMovie> response) { if (response.isSuccessful()) { mMovieList = response.body().Search; mAdapter.addItems(mMovieList); mAdapter.notifyDataSetChanged(); mShimmerLayout.stopShimmerAnimation(); mShimmerLayout.setVisibility(View.GONE); mRecyclerView.smoothScrollToPosition(0); } } @Override public void onFailure(@NonNull Call<SearchMovie> call, @NonNull Throwable t) { if (!call.isCanceled()) { t.printStackTrace(); } mShimmerLayout.stopShimmerAnimation(); } }); } } ``` #### 4. Final Result Now let's look at the result. <br>  <br> In my example I have a search view. Let's try and search "black panther", once I press enter on the keyboard it will run `fetchData();` and inside it I have set the visibility of ShimmerFrameLayout to visible and start its animation. <br>  <br><br> Once 'fetchData();` response is successful and data has been added into RecyclerViewAdapter, ShimmerFrameLayout visibility will be set to gone and animation will be stop. <br>  #### Documentation - You can check out facebook shimmer load library here: https://github.com/facebook/shimmer-android - If you want to check out the example I made in this post, you can visit here: https://github.com/steven-tjg/shimmering-load-example <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@steven.tjg/how-to-implement-shimmer-load-in-android">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":31441862,"name":"shimmer-android","full_name":"facebook/shimmer-android","html_url":"https://github.com/facebook/shimmer-android","fork":false,"owner":{"login":"facebook"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","tutorial","android","shimmer-load"],"users":["aar","color","id","android","style","layout","Override","SuppressWarnings","NonNull"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png"]} |
| parent author | |
| parent permlink | utopian-io |
| permlink | how-to-implement-shimmer-load-in-android |
| title | How to Implement Shimmer Load in Android |
| Transaction Info | Block #19996318/Trx 19776a80a178e5bfd013b23246ce8ab9604300dc |
View Raw JSON Data
{
"block": 19996318,
"op": [
"comment",
{
"author": "steven.tjg",
"body": "\n<br>\n<a href=\"http://facebook.github.io/shimmer-android/\">Facebook Shimmer</a>\n\nHi, in this post, I will show you how to implement Shimmer Load in Android application. After reading this post hopefully you can implement shimmer load in your Android project. Alright let's get started.\n\n#### What Will I Learn?\n- Logic of how shimmer load works.\n- Implement shimmer load in your project.\n\n#### Requirements\n- Android Studio\n- Knowledge of Java\n\n#### Difficulty\n- Basic\n\n#### Tutorial Contents\nSo maybe you are wondering, what exactly is shimmer load. This is a screenshot of Youtube apps on iOS.\n\nShimmer load is basically a placeholder that is shown when your apps is loading, for example when fetching data from an API.\n<br>\nThere are a lot of shimmer load library which works a bit different, but in this post I will be using a library from Facebook called <a href=\"https://github.com/facebook/shimmer-android\">shimmer-android</a>.\n<br>\nThe logic behind facebook shimmer load is basically switching view between two layout. In Android it is basically playing with layout visibility.\n<br><br>\nIn this tutorial, I will make an example of searching movie data from imdb API.\n\n#### Curriculum\n#### 1. Install Dependency\nTo install this dependency, simply add `implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'` in your application `build.gradle` file.\n<br>\nThis is my entire build.gradle file:\n```\napply plugin: 'com.android.application'\nandroid {\n compileSdkVersion 27\n buildToolsVersion '27.0.3'\n defaultConfig {\n applicationId \"com.steven.example.shimmerloadexample\"\n minSdkVersion 19\n targetSdkVersion 27\n versionCode 1\n versionName \"1.0\"\n testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n }\n buildTypes {\n debug {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n release {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n }\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_1_8\n targetCompatibility JavaVersion.VERSION_1_8\n }\n}\ndependencies {\n implementation fileTree(include: ['*.jar'], dir: 'libs')\n implementation 'com.android.support:appcompat-v7:27.0.2'\n implementation \"com.android.support:recyclerview-v7:27.0.2\"\n implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'\n implementation 'com.squareup.retrofit2:retrofit:2.3.0'\n implementation 'com.squareup.retrofit2:converter-gson:2.3.0'\n implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'\n implementation 'com.github.bumptech.glide:glide:4.6.1'\n annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'\n testImplementation 'junit:junit:4.12'\n androidTestImplementation 'com.android.support.test:runner:1.0.1'\n androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'\n}\n```\n\n#### 2. Create A Placeholder\nThe next thing is creating a placeholder for the shimmer load. For the movie list item I will have the end result looks like this:\n<br>\n\n<br>\nSo we need to create the place holder similar to our list item. The place holder I made looks like this:\n<br>\n\n<br>\nThis is my entire placeholder file with background colorShimmer #DDDDDD:\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"160dp\">\n\n <View\n android:id=\"@+id/view_image\"\n android:layout_width=\"120dp\"\n android:layout_height=\"match_parent\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:id=\"@+id/view_title\"\n android:layout_width=\"wrap_content\"\n android:layout_height=\"48dp\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:layout_toEndOf=\"@+id/view_image\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:layout_width=\"80dp\"\n android:layout_height=\"24dp\"\n android:layout_above=\"@id/view_type\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n <View\n android:id=\"@+id/view_type\"\n android:layout_width=\"160dp\"\n android:layout_height=\"24dp\"\n android:layout_alignParentBottom=\"true\"\n android:layout_alignParentEnd=\"true\"\n android:layout_margin=\"8dp\"\n android:background=\"@color/colorShimmer\" />\n\n</RelativeLayout>\n```\n\n#### 3. Use Placeholder\nNow it's time to use the placeholder that we've created. In your activity/fragment layout add ShimmerFrameLayout with the place holder inside it. In my example I have ShimmerFrameLayout and RecyclerView, when fetching data ShimmerFrameLayout will be shown and starts its animaton, and RecyclerView will be hide. Once all the data has been fetch and added to RecyclerView, RecyclerView will be shown, and ShimmerFrameLayout will be hide and stop its animation.\n<br>\nMy `activity_main.xml` file looks like this:\n<br>\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n xmlns:shimmer=\"http://schemas.android.com/apk/res-auto\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\n android:background=\"@android:color/white\"\n android:orientation=\"vertical\"\n tools:context=\"com.steven.example.shimmerloadexample.ui.MainActivity\">\n\n <android.support.v7.widget.SearchView\n android:id=\"@+id/search_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:focusable=\"true\"\n android:focusableInTouchMode=\"true\"\n android:theme=\"@style/Theme.AppCompat.Light\"\n app:queryHint=\"Search here\" />\n\n <com.facebook.shimmer.ShimmerFrameLayout\n android:id=\"@+id/shimmer_layout\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:visibility=\"gone\"\n shimmer:duration=\"800\">\n\n <LinearLayout\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:orientation=\"vertical\">\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n <include layout=\"@layout/shimmer_placeholder\" />\n\n </LinearLayout>\n\n </com.facebook.shimmer.ShimmerFrameLayout>\n\n <android.support.v7.widget.RecyclerView\n android:id=\"@+id/recycler_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\" />\n\n</LinearLayout>\n```\n\nAnd my 'MainActivity.java' looks like this:\n```\npublic class MainActivity extends AppCompatActivity {\n\n private static final String TAG = MainActivity.class.getSimpleName();\n\n private SearchView mSearchView;\n private ShimmerFrameLayout mShimmerLayout;\n private RecyclerView mRecyclerView;\n private RecyclerViewAdapter mAdapter;\n private List<Movie> mMovieList;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n mSearchView = findViewById(R.id.search_view);\n mShimmerLayout = findViewById(R.id.shimmer_layout);\n mRecyclerView = findViewById(R.id.recycler_view);\n\n mSearchView.setIconified(false);\n\n mMovieList = new ArrayList<>();\n mAdapter = new RecyclerViewAdapter(this);\n mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));\n mRecyclerView.setItemAnimator(new DefaultItemAnimator());\n mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));\n mRecyclerView.setAdapter(mAdapter);\n\n mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {\n @Override\n public boolean onQueryTextSubmit(String query) {\n fetchData();\n return false;\n }\n\n @Override\n public boolean onQueryTextChange(String newText) {\n return false;\n }\n });\n }\n\n @Override\n protected void onPause() {\n super.onPause();\n mShimmerLayout.stopShimmerAnimation();\n }\n\n private void fetchData() {\n mShimmerLayout.setVisibility(View.VISIBLE);\n mShimmerLayout.startShimmerAnimation();\n String keyword = mSearchView.getQuery().toString();\n keyword = keyword.replace(\" \", \"+\");\n RetrofitSingleton.getInstance().getRestAPI().searchTitle(keyword, 1, Config.API_KEY).enqueue(new Callback<SearchMovie>() {\n @SuppressWarnings(\"ConstantConditions\")\n @Override\n public void onResponse(@NonNull Call<SearchMovie> call, @NonNull Response<SearchMovie> response) {\n if (response.isSuccessful()) {\n mMovieList = response.body().Search;\n mAdapter.addItems(mMovieList);\n mAdapter.notifyDataSetChanged();\n mShimmerLayout.stopShimmerAnimation();\n mShimmerLayout.setVisibility(View.GONE);\n mRecyclerView.smoothScrollToPosition(0);\n }\n }\n\n @Override\n public void onFailure(@NonNull Call<SearchMovie> call, @NonNull Throwable t) {\n if (!call.isCanceled()) {\n t.printStackTrace();\n }\n mShimmerLayout.stopShimmerAnimation();\n }\n });\n }\n}\n```\n\n#### 4. Final Result\nNow let's look at the result.\n<br>\n\n<br>\nIn my example I have a search view. Let's try and search \"black panther\", once I press enter on the keyboard it will run `fetchData();` and inside it I have set the visibility of ShimmerFrameLayout to visible and start its animation.\n<br>\n\n<br><br>\nOnce 'fetchData();` response is successful and data has been added into RecyclerViewAdapter, ShimmerFrameLayout visibility will be set to gone and animation will be stop.\n<br>\n\n\n#### Documentation\n- You can check out facebook shimmer load library here: https://github.com/facebook/shimmer-android\n- If you want to check out the example I made in this post, you can visit here: https://github.com/steven-tjg/shimmering-load-example\n \n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@steven.tjg/how-to-implement-shimmer-load-in-android\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":31441862,\"name\":\"shimmer-android\",\"full_name\":\"facebook/shimmer-android\",\"html_url\":\"https://github.com/facebook/shimmer-android\",\"fork\":false,\"owner\":{\"login\":\"facebook\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"tutorial\",\"android\",\"shimmer-load\"],\"users\":[\"aar\",\"color\",\"id\",\"android\",\"style\",\"layout\",\"Override\",\"SuppressWarnings\",\"NonNull\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519007804/fqhjqnvf7eyvmz52iwvs.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519008092/qdwvboxyeztothihfdhn.jpg\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519010926/xxniauqcuvzkv6oc6dzx.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519011163/rytm8mbidpjfcjxlezu8.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013027/yrekcvhbns6155rcyklb.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013232/n1bp4cvmccpt9ilror7i.png\",\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1519013404/tfpgxvdvrmnixrgbifk5.png\"]}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "how-to-implement-shimmer-load-in-android",
"title": "How to Implement Shimmer Load in Android"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-19T04:12:45",
"trx_id": "19776a80a178e5bfd013b23246ce8ab9604300dc",
"trx_in_block": 42,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @alfarisi94 / how-to-use-database-eloquent-in-slim2018/02/18 04:56:54
steven.tjgupvoted (100.00%) @alfarisi94 / how-to-use-database-eloquent-in-slim
2018/02/18 04:56:54
| author | alfarisi94 |
| permlink | how-to-use-database-eloquent-in-slim |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19968403/Trx 6c9b67f9f19448b1e5f79e78b2e8ff9e0b0b8e0b |
View Raw JSON Data
{
"block": 19968403,
"op": [
"vote",
{
"author": "alfarisi94",
"permlink": "how-to-use-database-eloquent-in-slim",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-18T04:56:54",
"trx_id": "6c9b67f9f19448b1e5f79e78b2e8ff9e0b0b8e0b",
"trx_in_block": 26,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @alfarisi94 / how-to-use-twig-templating-in-slim2018/02/17 04:39:21
steven.tjgupvoted (100.00%) @alfarisi94 / how-to-use-twig-templating-in-slim
2018/02/17 04:39:21
| author | alfarisi94 |
| permlink | how-to-use-twig-templating-in-slim |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19939259/Trx 4eda8883938c8bef6d8e9795a4772fba8ae557ad |
View Raw JSON Data
{
"block": 19939259,
"op": [
"vote",
{
"author": "alfarisi94",
"permlink": "how-to-use-twig-templating-in-slim",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-17T04:39:21",
"trx_id": "4eda8883938c8bef6d8e9795a4772fba8ae557ad",
"trx_in_block": 37,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @danielniklaus / tele-north-sumatera-indonesia--2018-02-16-01-59-122018/02/16 06:01:42
steven.tjgupvoted (100.00%) @danielniklaus / tele-north-sumatera-indonesia--2018-02-16-01-59-12
2018/02/16 06:01:42
| author | danielniklaus |
| permlink | tele-north-sumatera-indonesia--2018-02-16-01-59-12 |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19912131/Trx af00f1defc9bc0ef37b95a6370ec03e86f8e808d |
View Raw JSON Data
{
"block": 19912131,
"op": [
"vote",
{
"author": "danielniklaus",
"permlink": "tele-north-sumatera-indonesia--2018-02-16-01-59-12",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-16T06:01:42",
"trx_id": "af00f1defc9bc0ef37b95a6370ec03e86f8e808d",
"trx_in_block": 14,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @alfarisi94 / how-to-make-step-progress-bar-only-using-css2018/02/09 07:42:21
steven.tjgupvoted (100.00%) @alfarisi94 / how-to-make-step-progress-bar-only-using-css
2018/02/09 07:42:21
| author | alfarisi94 |
| permlink | how-to-make-step-progress-bar-only-using-css |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19712712/Trx e2dc589af4313af1ac2a158930e07f2ac49467ed |
View Raw JSON Data
{
"block": 19712712,
"op": [
"vote",
{
"author": "alfarisi94",
"permlink": "how-to-make-step-progress-bar-only-using-css",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-09T07:42:21",
"trx_id": "e2dc589af4313af1ac2a158930e07f2ac49467ed",
"trx_in_block": 28,
"virtual_op": 0
}steemdelegated 10.555 SP to @steven.tjg2018/02/06 15:40:03
steemdelegated 10.555 SP to @steven.tjg
2018/02/06 15:40:03
| delegatee | steven.tjg |
| delegator | steem |
| vesting shares | 17167.522781 VESTS |
| Transaction Info | Block #19636139/Trx 87c2412e6cbd57f54ee667dc66a22f6319c982ab |
View Raw JSON Data
{
"block": 19636139,
"op": [
"delegate_vesting_shares",
{
"delegatee": "steven.tjg",
"delegator": "steem",
"vesting_shares": "17167.522781 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T15:40:03",
"trx_id": "87c2412e6cbd57f54ee667dc66a22f6319c982ab",
"trx_in_block": 8,
"virtual_op": 0
}steven.tjgclaimed reward balance: 7.359 SBD, 2.353 SP2018/02/06 14:10:33
steven.tjgclaimed reward balance: 7.359 SBD, 2.353 SP
2018/02/06 14:10:33
| account | steven.tjg |
| reward sbd | 7.359 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 3827.062703 VESTS |
| Transaction Info | Block #19634349/Trx a5c672e71eb93e195e3464030dd9f12e7ec4eb51 |
View Raw JSON Data
{
"block": 19634349,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "7.359 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "3827.062703 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T14:10:33",
"trx_id": "a5c672e71eb93e195e3464030dd9f12e7ec4eb51",
"trx_in_block": 10,
"virtual_op": 0
}steven.tjgreceived 7.359 SBD, 2.349 SP author reward for @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/02/06 11:42:24
steven.tjgreceived 7.359 SBD, 2.349 SP author reward for @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/02/06 11:42:24
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| sbd payout | 7.359 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 3820.926312 VESTS |
| Transaction Info | Block #19631387/Virtual Operation #15 |
View Raw JSON Data
{
"block": 19631387,
"op": [
"author_reward",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"sbd_payout": "7.359 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "3820.926312 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T11:42:24",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 15
}utopian.payreceived 1.566 SP benefactor reward from @steven.tjg2018/02/06 11:42:24
utopian.payreceived 1.566 SP benefactor reward from @steven.tjg
2018/02/06 11:42:24
| author | steven.tjg |
| benefactor | utopian.pay |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 2546.602386 VESTS |
| Transaction Info | Block #19631387/Virtual Operation #14 |
View Raw JSON Data
{
"block": 19631387,
"op": [
"comment_benefactor_reward",
{
"author": "steven.tjg",
"benefactor": "utopian.pay",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "2546.602386 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T11:42:24",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 14
}steven.tjgreceived 0.004 SP curation reward for @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/02/06 11:42:24
steven.tjgreceived 0.004 SP curation reward for @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/02/06 11:42:24
| comment author | steven.tjg |
| comment permlink | how-to-use-volley-in-android-to-make-network-call |
| curator | steven.tjg |
| reward | 6.136391 VESTS |
| Transaction Info | Block #19631387/Virtual Operation #11 |
View Raw JSON Data
{
"block": 19631387,
"op": [
"curation_reward",
{
"comment_author": "steven.tjg",
"comment_permlink": "how-to-use-volley-in-android-to-make-network-call",
"curator": "steven.tjg",
"reward": "6.136391 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T11:42:24",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 11
}steemdelegated 12.908 SP to @steven.tjg2018/02/06 11:15:15
steemdelegated 12.908 SP to @steven.tjg
2018/02/06 11:15:15
| delegatee | steven.tjg |
| delegator | steem |
| vesting shares | 20994.875139 VESTS |
| Transaction Info | Block #19630846/Trx f76ecf44419c93ddb207fa78acc8758e0a4de4e6 |
View Raw JSON Data
{
"block": 19630846,
"op": [
"delegate_vesting_shares",
{
"delegatee": "steven.tjg",
"delegator": "steem",
"vesting_shares": "20994.875139 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T11:15:15",
"trx_id": "f76ecf44419c93ddb207fa78acc8758e0a4de4e6",
"trx_in_block": 21,
"virtual_op": 0
}steven.tjgclaimed reward balance: 7.664 SBD, 2.357 SP2018/02/06 09:10:03
steven.tjgclaimed reward balance: 7.664 SBD, 2.357 SP
2018/02/06 09:10:03
| account | steven.tjg |
| reward sbd | 7.664 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 3833.259707 VESTS |
| Transaction Info | Block #19628342/Trx 83a4a9dda0bbc17ab4df5fec90a454090cb7f2cb |
View Raw JSON Data
{
"block": 19628342,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "7.664 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "3833.259707 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T09:10:03",
"trx_id": "83a4a9dda0bbc17ab4df5fec90a454090cb7f2cb",
"trx_in_block": 16,
"virtual_op": 0
}steven.tjgreceived 7.664 SBD, 2.328 SP author reward for @steven.tjg / how-to-implement-seamless-otp-on-android2018/02/06 04:24:15
steven.tjgreceived 7.664 SBD, 2.328 SP author reward for @steven.tjg / how-to-implement-seamless-otp-on-android
2018/02/06 04:24:15
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| sbd payout | 7.664 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 3786.212787 VESTS |
| Transaction Info | Block #19622625/Virtual Operation #31 |
View Raw JSON Data
{
"block": 19622625,
"op": [
"author_reward",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"sbd_payout": "7.664 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "3786.212787 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T04:24:15",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 31
}utopian.payreceived 1.552 SP benefactor reward from @steven.tjg2018/02/06 04:24:15
utopian.payreceived 1.552 SP benefactor reward from @steven.tjg
2018/02/06 04:24:15
| author | steven.tjg |
| benefactor | utopian.pay |
| permlink | how-to-implement-seamless-otp-on-android |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 2524.141858 VESTS |
| Transaction Info | Block #19622625/Virtual Operation #30 |
View Raw JSON Data
{
"block": 19622625,
"op": [
"comment_benefactor_reward",
{
"author": "steven.tjg",
"benefactor": "utopian.pay",
"permlink": "how-to-implement-seamless-otp-on-android",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "2524.141858 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T04:24:15",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 30
}steven.tjgreceived 0.024 SP curation reward for @steven.tjg / how-to-implement-seamless-otp-on-android2018/02/06 04:24:15
steven.tjgreceived 0.024 SP curation reward for @steven.tjg / how-to-implement-seamless-otp-on-android
2018/02/06 04:24:15
| comment author | steven.tjg |
| comment permlink | how-to-implement-seamless-otp-on-android |
| curator | steven.tjg |
| reward | 38.864420 VESTS |
| Transaction Info | Block #19622625/Virtual Operation #19 |
View Raw JSON Data
{
"block": 19622625,
"op": [
"curation_reward",
{
"comment_author": "steven.tjg",
"comment_permlink": "how-to-implement-seamless-otp-on-android",
"curator": "steven.tjg",
"reward": "38.864420 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-06T04:24:15",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 19
}steven.tjgreceived 0.001 SP curation reward for @murez-nst / mureztutorial0082018/02/05 09:14:48
steven.tjgreceived 0.001 SP curation reward for @murez-nst / mureztutorial008
2018/02/05 09:14:48
| comment author | murez-nst |
| comment permlink | mureztutorial008 |
| curator | steven.tjg |
| reward | 2.045577 VESTS |
| Transaction Info | Block #19599643/Virtual Operation #15 |
View Raw JSON Data
{
"block": 19599643,
"op": [
"curation_reward",
{
"comment_author": "murez-nst",
"comment_permlink": "mureztutorial008",
"curator": "steven.tjg",
"reward": "2.045577 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-05T09:14:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 15
}steven.tjgreceived 0.004 SP curation reward for @andrixyz / how-to-display-pop-up-in-ios-development-using-sclalertview2018/02/04 18:18:57
steven.tjgreceived 0.004 SP curation reward for @andrixyz / how-to-display-pop-up-in-ios-development-using-sclalertview
2018/02/04 18:18:57
| comment author | andrixyz |
| comment permlink | how-to-display-pop-up-in-ios-development-using-sclalertview |
| curator | steven.tjg |
| reward | 6.136923 VESTS |
| Transaction Info | Block #19581735/Virtual Operation #7 |
View Raw JSON Data
{
"block": 19581735,
"op": [
"curation_reward",
{
"comment_author": "andrixyz",
"comment_permlink": "how-to-display-pop-up-in-ios-development-using-sclalertview",
"curator": "steven.tjg",
"reward": "6.136923 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-04T18:18:57",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 7
}steven.tjgclaimed reward balance: 0.004 SP2018/02/03 20:08:51
steven.tjgclaimed reward balance: 0.004 SP
2018/02/03 20:08:51
| account | steven.tjg |
| reward sbd | 0.000 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 6.137742 VESTS |
| Transaction Info | Block #19555218/Trx ec8b0d86808dd2ea9d3722cc0816a54aa695db2b |
View Raw JSON Data
{
"block": 19555218,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "0.000 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "6.137742 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-03T20:08:51",
"trx_id": "ec8b0d86808dd2ea9d3722cc0816a54aa695db2b",
"trx_in_block": 8,
"virtual_op": 0
}steven.tjgreceived 0.004 SP curation reward for @andrixyz / working-with-ezratingview-in-ios-apps-development2018/02/02 02:06:39
steven.tjgreceived 0.004 SP curation reward for @andrixyz / working-with-ezratingview-in-ios-apps-development
2018/02/02 02:06:39
| comment author | andrixyz |
| comment permlink | working-with-ezratingview-in-ios-apps-development |
| curator | steven.tjg |
| reward | 6.137742 VESTS |
| Transaction Info | Block #19504858/Virtual Operation #18 |
View Raw JSON Data
{
"block": 19504858,
"op": [
"curation_reward",
{
"comment_author": "andrixyz",
"comment_permlink": "working-with-ezratingview-in-ios-apps-development",
"curator": "steven.tjg",
"reward": "6.137742 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-02T02:06:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 18
}2018/01/31 13:44:24
2018/01/31 13:44:24
| author | utopian-io |
| body | ### Hey @steven.tjg I am @utopian-io. I have just upvoted you! #### Achievements - You have less than 500 followers. Just gave you a gift to help you succeed! - Seems like you contribute quite often. AMAZING! #### Suggestions - Contribute more often to get higher and higher rewards. I wish to see you often! - Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck! #### Get Noticed! - Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions! #### Community-Driven Witness! I am the first and only Steem Community-Driven Witness. <a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER! - <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness With SteemConnect</a> - <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness with SteemConnect</a> - Or vote/proxy on <a href="https://steemit.com/~witnesses">Steemit Witnesses</a> [](https://steemit.com/~witnesses) **Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | steven.tjg |
| parent permlink | how-to-implement-seamless-otp-on-android |
| permlink | re-steventjg-how-to-implement-seamless-otp-on-android-20180131t134424334z |
| title | |
| Transaction Info | Block #19461283/Trx 75709320aad342f0bd691db5a76b06d52d0a68ef |
View Raw JSON Data
{
"block": 19461283,
"op": [
"comment",
{
"author": "utopian-io",
"body": "### Hey @steven.tjg I am @utopian-io. I have just upvoted you!\n#### Achievements\n- You have less than 500 followers. Just gave you a gift to help you succeed!\n- Seems like you contribute quite often. AMAZING!\n#### Suggestions\n- Contribute more often to get higher and higher rewards. I wish to see you often!\n- Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!\n#### Get Noticed!\n- Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!\n#### Community-Driven Witness!\nI am the first and only Steem Community-Driven Witness. <a href=\"https://discord.gg/zTrEMqB\">Participate on Discord</a>. Lets GROW TOGETHER!\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1\">Vote for my Witness With SteemConnect</a>\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1\">Proxy vote to Utopian Witness with SteemConnect</a>\n- Or vote/proxy on <a href=\"https://steemit.com/~witnesses\">Steemit Witnesses</a>\n\n[](https://steemit.com/~witnesses)\n\n**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-implement-seamless-otp-on-android",
"permlink": "re-steventjg-how-to-implement-seamless-otp-on-android-20180131t134424334z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T13:44:24",
"trx_id": "75709320aad342f0bd691db5a76b06d52d0a68ef",
"trx_in_block": 45,
"virtual_op": 0
}utopian-ioupvoted (2.17%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 13:44:21
utopian-ioupvoted (2.17%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 13:44:21
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | utopian-io |
| weight | 217 (2.17%) |
| Transaction Info | Block #19461282/Trx 49d7a57cf14cf2047d675518f1c4f917319fa672 |
View Raw JSON Data
{
"block": 19461282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "utopian-io",
"weight": 217
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T13:44:21",
"trx_id": "49d7a57cf14cf2047d675518f1c4f917319fa672",
"trx_in_block": 36,
"virtual_op": 0
}2018/01/31 13:15:57
2018/01/31 13:15:57
| author | utopian-io |
| body | ### Hey @steven.tjg I am @utopian-io. I have just upvoted you! #### Achievements - You have less than 500 followers. Just gave you a gift to help you succeed! - Seems like you contribute quite often. AMAZING! #### Suggestions - Contribute more often to get higher and higher rewards. I wish to see you often! - Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck! #### Get Noticed! - Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions! #### Community-Driven Witness! I am the first and only Steem Community-Driven Witness. <a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER! - <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness With SteemConnect</a> - <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness with SteemConnect</a> - Or vote/proxy on <a href="https://steemit.com/~witnesses">Steemit Witnesses</a> [](https://steemit.com/~witnesses) **Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | steven.tjg |
| parent permlink | how-to-use-volley-in-android-to-make-network-call |
| permlink | re-steventjg-how-to-use-volley-in-android-to-make-network-call-20180131t131557438z |
| title | |
| Transaction Info | Block #19460714/Trx d42eb0d0e95720821d96befaf96b5334441984a2 |
View Raw JSON Data
{
"block": 19460714,
"op": [
"comment",
{
"author": "utopian-io",
"body": "### Hey @steven.tjg I am @utopian-io. I have just upvoted you!\n#### Achievements\n- You have less than 500 followers. Just gave you a gift to help you succeed!\n- Seems like you contribute quite often. AMAZING!\n#### Suggestions\n- Contribute more often to get higher and higher rewards. I wish to see you often!\n- Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!\n#### Get Noticed!\n- Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!\n#### Community-Driven Witness!\nI am the first and only Steem Community-Driven Witness. <a href=\"https://discord.gg/zTrEMqB\">Participate on Discord</a>. Lets GROW TOGETHER!\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1\">Vote for my Witness With SteemConnect</a>\n- <a href=\"https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1\">Proxy vote to Utopian Witness with SteemConnect</a>\n- Or vote/proxy on <a href=\"https://steemit.com/~witnesses\">Steemit Witnesses</a>\n\n[](https://steemit.com/~witnesses)\n\n**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-use-volley-in-android-to-make-network-call",
"permlink": "re-steventjg-how-to-use-volley-in-android-to-make-network-call-20180131t131557438z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T13:15:57",
"trx_id": "d42eb0d0e95720821d96befaf96b5334441984a2",
"trx_in_block": 28,
"virtual_op": 0
}utopian-ioupvoted (2.17%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/01/31 13:15:54
utopian-ioupvoted (2.17%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/01/31 13:15:54
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| voter | utopian-io |
| weight | 217 (2.17%) |
| Transaction Info | Block #19460713/Trx 1cc0de52712616b4a5e821a7f49a31bedf3c6ac4 |
View Raw JSON Data
{
"block": 19460713,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"voter": "utopian-io",
"weight": 217
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T13:15:54",
"trx_id": "1cc0de52712616b4a5e821a7f49a31bedf3c6ac4",
"trx_in_block": 2,
"virtual_op": 0
}steven.tjgupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/01/31 12:38:24
steven.tjgupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/01/31 12:38:24
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| voter | steven.tjg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19459964/Trx e4969db9576707ef871caf610140f0dbfe861d12 |
View Raw JSON Data
{
"block": 19459964,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"voter": "steven.tjg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T12:38:24",
"trx_id": "e4969db9576707ef871caf610140f0dbfe861d12",
"trx_in_block": 43,
"virtual_op": 0
}ciferupvoted (90.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/01/31 09:52:15
ciferupvoted (90.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/01/31 09:52:15
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| voter | cifer |
| weight | 9000 (90.00%) |
| Transaction Info | Block #19456644/Trx 482d9f7cca5ad6044b596f4b4cf69b3930a8f197 |
View Raw JSON Data
{
"block": 19456644,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"voter": "cifer",
"weight": 9000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T09:52:15",
"trx_id": "482d9f7cca5ad6044b596f4b4cf69b3930a8f197",
"trx_in_block": 22,
"virtual_op": 0
}2018/01/31 09:51:12
2018/01/31 09:51:12
| author | shreyasgune |
| body | Thank you for the contribution. It has been approved. You can contact us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)** |
| json metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
| parent author | steven.tjg |
| parent permlink | how-to-use-volley-in-android-to-make-network-call |
| permlink | re-steventjg-how-to-use-volley-in-android-to-make-network-call-20180131t095051588z |
| title | |
| Transaction Info | Block #19456623/Trx b36b0f6050269bc5e9b64e6086c74bebbf431d37 |
View Raw JSON Data
{
"block": 19456623,
"op": [
"comment",
{
"author": "shreyasgune",
"body": "Thank you for the contribution. It has been approved.\n\nYou can contact us on [Discord](https://discord.gg/uTyJkNm).\n**[[utopian-moderator]](https://utopian.io/moderators)**",
"json_metadata": "{\"tags\":[\"utopian-io\"],\"community\":\"utopian\",\"app\":\"utopian/1.0.0\"}",
"parent_author": "steven.tjg",
"parent_permlink": "how-to-use-volley-in-android-to-make-network-call",
"permlink": "re-steventjg-how-to-use-volley-in-android-to-make-network-call-20180131t095051588z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T09:51:12",
"trx_id": "b36b0f6050269bc5e9b64e6086c74bebbf431d37",
"trx_in_block": 10,
"virtual_op": 0
}steven.tjgpublished a new post: how-to-use-volley-in-android-to-make-network-call2018/01/31 09:48:00
steven.tjgpublished a new post: how-to-use-volley-in-android-to-make-network-call
2018/01/31 09:48:00
| author | steven.tjg |
| body |  Hi, in this tutorial I will show you how to use Volley to make a network call. #### What Will I Learn? - Implement Volley on an Android project. - Use Volley to make a network call. #### Requirements - Android Studio - Basic knowledge of Java #### Difficulty - Basic #### Overwiew Most of the time when you develop an Android apps, you will need to request data from or to a server. In Android, there is something called Async Task which you can use to request data from the network. But Async Task is kinda complicated to implement and work with. Luckily there are two popular third party library that can do the same but in a much simple way, and they are Volley and Retrofit. This tutorial will be focusing on Volley, though I do plan to make another tutorial with Retrofit in the future. #### Tutorial Contents **1. Add Volley Dependency in Gradle** To add volley dependency, you can simply add this code in the project build gradle file. ``` implementation 'com.android.volley:volley:1.1.0' ``` This is my whole ```build.gradle``` file: ``` apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { applicationId "com.steven.example.volleyexample" minSdkVersion 21 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:27.0.2' implementation 'com.android.support:design:27.0.2' implementation 'com.android.support:recyclerview-v7:27.0.2' implementation 'com.android.volley:volley:1.1.0' implementation 'com.squareup.picasso:picasso:2.5.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } ``` **2. Add Permission to connect to the internet** Now, in order to make a network call, the application need access or in Android it is called permission to connect to the internet. To do that simply add this line of code in your ```AndroidManifest.xml```. ``` <uses-permission android:name="android.permission.INTERNET" /> ``` And this is the code in my ```AndroidManifest.xml```. ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.steven.example.volleyexample"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MemberActivity" /> </application> </manifest> ``` **3. Create Volley Singleton** Now lets create a singleton class, so each time when you need to request to a network, you simply call this singleton class. This is my ```VolleySingleton.java``` class code: ``` public class VolleySingleton { private static VolleySingleton mInstance; private static Context mContext; private RequestQueue mRequestQueue; private ImageLoader mImageLoader; private VolleySingleton(Context context) { mContext = context; mRequestQueue = getRequestQueue(); mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> cache = new LruCache<>(20); @Override public Bitmap getBitmap(String url) { return cache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { cache.put(url, bitmap); } }); } public static synchronized VolleySingleton getInstance(Context context) { if (mInstance == null) { mInstance = new VolleySingleton(context); } return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext()); } return mRequestQueue; } public <T> void addToRequestQueue(Request<T> request, String tag) { request.setTag(tag); getRequestQueue().add(request); } public void cancelRequest(String tag) { if (mRequestQueue != null) { mRequestQueue.cancelAll(tag); } } public ImageLoader getImageLoader() { return mImageLoader; } } ``` **4. Create Data Model** Okay, in this tutorial I will make a network call that request data from https://api.github.com/users. That API will return example data of Github user. So create a class for the data model and create getter and setter for each field. ``` public class DataModel { private String login; private int id; private String avatar_url; private String gravatar_id; private String url; private String html_url; private String followers_url; private String following_url; private String gists_url; private String starred_url; private String subscriptions_url; private String organizations_url; private String repos_url; private String events_url; private String recieved_events_url; private String type; private boolean site_admin; public DataModel(String login, int id, String avatar_url, String gravatar_id, String url, String html_url, String followers_url, String following_url, String gists_url, String starred_url, String subscriptions_url, String organizations_url, String repos_url, String events_url, String received_events_url, String type, boolean site_admin) { this.login = login; this.id = id; this.avatar_url = avatar_url; this.gravatar_id = gravatar_id; this.url = url; this.html_url = html_url; this.followers_url = followers_url; this.following_url = following_url; this.gists_url = gists_url; this.starred_url = starred_url; this.subscriptions_url = subscriptions_url; this.organizations_url = organizations_url; this.repos_url = repos_url; this.events_url = events_url; this.recieved_events_url = received_events_url; this.type = type; this.site_admin = site_admin; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAvatar_url() { return avatar_url; } public void setAvatar_url(String avatar_url) { this.avatar_url = avatar_url; } public String getGravatar_id() { return gravatar_id; } public void setGravatar_id(String gravatar_id) { this.gravatar_id = gravatar_id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getHtml_url() { return html_url; } public void setHtml_url(String html_url) { this.html_url = html_url; } public String getFollowers_url() { return followers_url; } public void setFollowers_url(String followers_url) { this.followers_url = followers_url; } public String getFollowing_url() { return following_url; } public void setFollowing_url(String following_url) { this.following_url = following_url; } public String getGists_url() { return gists_url; } public void setGists_url(String gists_url) { this.gists_url = gists_url; } public String getStarred_url() { return starred_url; } public void setStarred_url(String starred_url) { this.starred_url = starred_url; } public String getSubscriptions_url() { return subscriptions_url; } public void setSubscriptions_url(String subscriptions_url) { this.subscriptions_url = subscriptions_url; } public String getOrganizations_url() { return organizations_url; } public void setOrganizations_url(String organizations_url) { this.organizations_url = organizations_url; } public String getRepos_url() { return repos_url; } public void setRepos_url(String repos_url) { this.repos_url = repos_url; } public String getEvents_url() { return events_url; } public void setEvents_url(String events_url) { this.events_url = events_url; } public String getRecieved_events_url() { return recieved_events_url; } public void setRecieved_events_url(String recieved_events_url) { this.recieved_events_url = recieved_events_url; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isSite_admin() { return site_admin; } public void setSite_admin(boolean site_admin) { this.site_admin = site_admin; } ``` **5. Make Network Call** Now its time to make a network call. Since the data we get from API is an array of object, we will use JsonArrayRequest. If the data returned is an object, then you can use JsonObjectRequest. In the example code below. After the request is successful, we need to loop and insert each field of the object into an List, then we can pass the List into a RecyclerViewAdapter and show the result in a RecyclerView. After creating a request, add it to the queue by calling VolleySingleton instance. ``` JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, REQUEST_URL, null, response -> { List<DataModel> data = new ArrayList<>(); for (int i = 0; i < response.length(); i++) { try { JSONObject object = response.getJSONObject(i); DataModel model = new DataModel(object.getString("login"), object.getInt("id"), object.getString("avatar_url"), object.getString("gravatar_id"), object.getString("url"), object.getString("html_url"), object.getString("followers_url"), object.getString("following_url"), object.getString("gists_url"), object.getString("starred_url"), object.getString("subscriptions_url"), object.getString("organizations_url"), object.getString("repos_url"), object.getString("events_url"), object.getString("received_events_url"), object.getString("type"), object.getBoolean("site_admin")); data.add(model); } catch (Exception e) { Log.d(TAG, e.toString()); } finally { mAdapter.clearItems(); mAdapter.addItems(data); mAdapter.notifyDataSetChanged(); } } }, error -> { Log.d(TAG, error.toString()); }); VolleySingleton.getInstance(this.getApplicationContext()).addToRequestQueue(request, NETWORK_CALL); ``` **6. Display Data in Recycler View** Now it is time to show data from the API in a RecyclerView. First we need to create a layout for the recycler view holder. In this example I name it ```item_user.xml``` with the following code: ``` <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.AppCompatImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/user_avatar" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="centerCrop" /> ``` The next step is to bind ```item_user.xml``` to an adapter by overriding the onCreateViewHolder method. Then set the data that we get from API to RecyclerView in the onBindView method. The example code below is an RecyclerViewAdapter. ``` public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context mContext; private List<DataModel> mUserData = new ArrayList<>(); RecyclerViewAdapter(Context context) { mContext = context; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new UserDataViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_user, parent, false)); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { UserDataViewHolder userDataViewHolder = (UserDataViewHolder) holder; VolleySingleton.getInstance(mContext).getImageLoader().get(mUserData.get(position).getAvatar_url(), new ImageLoader.ImageListener() { @Override public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { userDataViewHolder.mUserAvatar.setImageBitmap(response.getBitmap()); } @Override public void onErrorResponse(VolleyError error) { } }); userDataViewHolder.mUserAvatar.setOnClickListener(v -> mContext.startActivity(new Intent(mContext, MemberActivity.class). putExtra(MemberActivity.ARG_LOGIN, mUserData.get(position).getLogin()). putExtra(MemberActivity.ARG_ID, mUserData.get(position).getId()). putExtra(MemberActivity.ARG_AVATAR_URL, mUserData.get(position).getAvatar_url()). putExtra(MemberActivity.ARG_GRAVATAR_ID, mUserData.get(position).getGravatar_id()). putExtra(MemberActivity.ARG_URL, mUserData.get(position).getUrl()). putExtra(MemberActivity.ARG_HTML_URL, mUserData.get(position).getHtml_url()). putExtra(MemberActivity.ARG_FOLLOWERS_URL, mUserData.get(position).getFollowers_url()). putExtra(MemberActivity.ARG_FOLLOWING_URL, mUserData.get(position).getFollowing_url()). putExtra(MemberActivity.ARG_GISTS_URL, mUserData.get(position).getGists_url()). putExtra(MemberActivity.ARG_STARRED_URL, mUserData.get(position).getStarred_url()). putExtra(MemberActivity.ARG_SUBSCRIPTIONS_URL, mUserData.get(position).getSubscriptions_url()). putExtra(MemberActivity.ARG_ORGANIZATIONS_URL, mUserData.get(position).getOrganizations_url()). putExtra(MemberActivity.ARG_REPOS_URL, mUserData.get(position).getRepos_url()). putExtra(MemberActivity.ARG_EVENTS_URL, mUserData.get(position).getEvents_url()). putExtra(MemberActivity.ARG_RECIEVED_EVENTS_URL, mUserData.get(position).getRecieved_events_url()). putExtra(MemberActivity.ARG_TYPE, mUserData.get(position).getType()). putExtra(MemberActivity.ARG_SITE_ADMIN, mUserData.get(position).isSite_admin()))); } @Override public int getItemCount() { return mUserData.size(); } public void addItems(List<DataModel> data) { mUserData.addAll(data); } public void clearItems() { mUserData.clear(); } public class UserDataViewHolder extends RecyclerView.ViewHolder { private AppCompatImageView mUserAvatar; UserDataViewHolder(View itemView) { super(itemView); mUserAvatar = itemView.findViewById(R.id.user_avatar); } } } ``` The result will look like this:  For further usage, you can check out volley repository here: https://github.com/google/volley. You can also check out the example project I made in this tutorial here: https://github.com/steven-tjg/volley-example. <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@steven.tjg/how-to-use-volley-in-android-to-make-network-call">Utopian.io - Rewarding Open Source Contributors</a></em><hr/> |
| json metadata | {"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":79936381,"name":"volley","full_name":"google/volley","html_url":"https://github.com/google/volley","fork":false,"owner":{"login":"google"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","android","tutorial","volley","network"],"users":["mipmap","string","style","Override"],"links":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1517311899/jwqt9xxijwbr477ojy0v.jpg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1517311899/jwqt9xxijwbr477ojy0v.jpg"],"moderator":{"account":"shreyasgune","time":"2018-01-31T09:48:00.992Z","reviewed":true,"pending":false,"flagged":false}} |
| parent author | |
| parent permlink | utopian-io |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| title | How to Use Volley in Android to Make Network Call |
| Transaction Info | Block #19456559/Trx 08301ee8c1826f32ce727795cbbc78fdc191e175 |
View Raw JSON Data
{
"block": 19456559,
"op": [
"comment",
{
"author": "steven.tjg",
"body": "\n\nHi, in this tutorial I will show you how to use Volley to make a network call.\n\n#### What Will I Learn?\n- Implement Volley on an Android project.\n- Use Volley to make a network call.\n\n#### Requirements\n- Android Studio\n- Basic knowledge of Java\n\n#### Difficulty\n- Basic\n\n#### Overwiew\nMost of the time when you develop an Android apps, you will need to request data from or to a server. In Android, there is something called Async Task which you can use to request data from the network. But Async Task is kinda complicated to implement and work with. Luckily there are two popular third party library that can do the same but in a much simple way, and they are Volley and Retrofit. This tutorial will be focusing on Volley, though I do plan to make another tutorial with Retrofit in the future.\n\n#### Tutorial Contents\n**1. Add Volley Dependency in Gradle**\nTo add volley dependency, you can simply add this code in the project build gradle file.\n```\nimplementation 'com.android.volley:volley:1.1.0'\n```\nThis is my whole ```build.gradle``` file:\n```\napply plugin: 'com.android.application'\nandroid {\n compileSdkVersion 27\n buildToolsVersion '27.0.3'\n defaultConfig {\n applicationId \"com.steven.example.volleyexample\"\n minSdkVersion 21\n targetSdkVersion 27\n versionCode 1\n versionName \"1.0\"\n testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n }\n buildTypes {\n release {\n minifyEnabled false\n proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n }\n }\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_1_8\n targetCompatibility JavaVersion.VERSION_1_8\n }\n}\ndependencies {\n implementation fileTree(include: ['*.jar'], dir: 'libs')\n implementation 'com.android.support:appcompat-v7:27.0.2'\n implementation 'com.android.support:design:27.0.2'\n implementation 'com.android.support:recyclerview-v7:27.0.2'\n implementation 'com.android.volley:volley:1.1.0'\n implementation 'com.squareup.picasso:picasso:2.5.2'\n testImplementation 'junit:junit:4.12'\n androidTestImplementation 'com.android.support.test:runner:1.0.1'\n androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'\n}\n\n```\n\n**2. Add Permission to connect to the internet**\nNow, in order to make a network call, the application need access or in Android it is called permission to connect to the internet. To do that simply add this line of code in your ```AndroidManifest.xml```.\n```\n<uses-permission android:name=\"android.permission.INTERNET\" />\n```\nAnd this is the code in my ```AndroidManifest.xml```.\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.steven.example.volleyexample\">\n <uses-permission android:name=\"android.permission.INTERNET\" />\n <application\n android:allowBackup=\"true\"\n android:fullBackupContent=\"false\"\n android:icon=\"@mipmap/ic_launcher\"\n android:label=\"@string/app_name\"\n android:roundIcon=\"@mipmap/ic_launcher_round\"\n android:supportsRtl=\"true\"\n android:theme=\"@style/AppTheme\">\n <activity android:name=\".MainActivity\">\n <intent-filter>\n <action android:name=\"android.intent.action.MAIN\" />\n <action android:name=\"android.intent.action.VIEW\" />\n <category android:name=\"android.intent.category.LAUNCHER\" />\n </intent-filter>\n </activity>\n <activity android:name=\".MemberActivity\" />\n </application>\n</manifest>\n```\n\n**3. Create Volley Singleton**\nNow lets create a singleton class, so each time when you need to request to a network, you simply call this singleton class.\n\nThis is my ```VolleySingleton.java``` class code:\n\n```\npublic class VolleySingleton {\n private static VolleySingleton mInstance;\n private static Context mContext;\n private RequestQueue mRequestQueue;\n private ImageLoader mImageLoader;\n private VolleySingleton(Context context) {\n mContext = context;\n mRequestQueue = getRequestQueue();\n mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {\n private final LruCache<String, Bitmap> cache = new LruCache<>(20);\n @Override\n public Bitmap getBitmap(String url) {\n return cache.get(url);\n }\n @Override\n public void putBitmap(String url, Bitmap bitmap) {\n cache.put(url, bitmap);\n }\n });\n }\n public static synchronized VolleySingleton getInstance(Context context) {\n if (mInstance == null) {\n mInstance = new VolleySingleton(context);\n }\n return mInstance;\n }\n public RequestQueue getRequestQueue() {\n if (mRequestQueue == null) {\n mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());\n }\n return mRequestQueue;\n }\n public <T> void addToRequestQueue(Request<T> request, String tag) {\n request.setTag(tag);\n getRequestQueue().add(request);\n }\n public void cancelRequest(String tag) {\n if (mRequestQueue != null) {\n mRequestQueue.cancelAll(tag);\n }\n }\n public ImageLoader getImageLoader() {\n return mImageLoader;\n }\n}\n```\n\n**4. Create Data Model**\nOkay, in this tutorial I will make a network call that request data from https://api.github.com/users. That API will return example data of Github user. So create a class for the data model and create getter and setter for each field.\n```\npublic class DataModel {\n private String login;\n private int id;\n private String avatar_url;\n private String gravatar_id;\n private String url;\n private String html_url;\n private String followers_url;\n private String following_url;\n private String gists_url;\n private String starred_url;\n private String subscriptions_url;\n private String organizations_url;\n private String repos_url;\n private String events_url;\n private String recieved_events_url;\n private String type;\n private boolean site_admin;\n\n public DataModel(String login, int id, String avatar_url, String gravatar_id, String url, String html_url,\n String followers_url, String following_url, String gists_url, String starred_url, String subscriptions_url,\n String organizations_url, String repos_url, String events_url, String received_events_url, String type, boolean site_admin) {\n this.login = login;\n this.id = id;\n this.avatar_url = avatar_url;\n this.gravatar_id = gravatar_id;\n this.url = url;\n this.html_url = html_url;\n this.followers_url = followers_url;\n this.following_url = following_url;\n this.gists_url = gists_url;\n this.starred_url = starred_url;\n this.subscriptions_url = subscriptions_url;\n this.organizations_url = organizations_url;\n this.repos_url = repos_url;\n this.events_url = events_url;\n this.recieved_events_url = received_events_url;\n this.type = type;\n this.site_admin = site_admin;\n }\n public String getLogin() {\n return login;\n }\n public void setLogin(String login) {\n this.login = login;\n }\n public int getId() {\n return id;\n }\n public void setId(int id) {\n this.id = id;\n }\n public String getAvatar_url() {\n return avatar_url;\n }\n public void setAvatar_url(String avatar_url) {\n this.avatar_url = avatar_url;\n }\n public String getGravatar_id() {\n return gravatar_id;\n }\n public void setGravatar_id(String gravatar_id) {\n this.gravatar_id = gravatar_id;\n }\n public String getUrl() {\n return url;\n }\n public void setUrl(String url) {\n this.url = url;\n }\n public String getHtml_url() {\n return html_url;\n }\n public void setHtml_url(String html_url) {\n this.html_url = html_url;\n }\n public String getFollowers_url() {\n return followers_url;\n }\n public void setFollowers_url(String followers_url) {\n this.followers_url = followers_url;\n }\n public String getFollowing_url() {\n return following_url;\n }\n public void setFollowing_url(String following_url) {\n this.following_url = following_url;\n }\n public String getGists_url() {\n return gists_url;\n }\n public void setGists_url(String gists_url) {\n this.gists_url = gists_url;\n }\n public String getStarred_url() {\n return starred_url;\n }\n public void setStarred_url(String starred_url) {\n this.starred_url = starred_url;\n }\n public String getSubscriptions_url() {\n return subscriptions_url;\n }\n public void setSubscriptions_url(String subscriptions_url) {\n this.subscriptions_url = subscriptions_url;\n }\n public String getOrganizations_url() {\n return organizations_url;\n }\n public void setOrganizations_url(String organizations_url) {\n this.organizations_url = organizations_url;\n }\n public String getRepos_url() {\n return repos_url;\n }\n public void setRepos_url(String repos_url) {\n this.repos_url = repos_url;\n }\n public String getEvents_url() {\n return events_url;\n }\n public void setEvents_url(String events_url) {\n this.events_url = events_url;\n }\n public String getRecieved_events_url() {\n return recieved_events_url;\n }\n public void setRecieved_events_url(String recieved_events_url) {\n this.recieved_events_url = recieved_events_url;\n }\n public String getType() {\n return type;\n }\n public void setType(String type) {\n this.type = type;\n }\n public boolean isSite_admin() {\n return site_admin;\n }\n public void setSite_admin(boolean site_admin) {\n this.site_admin = site_admin;\n }\n``` \n\n**5. Make Network Call**\nNow its time to make a network call. Since the data we get from API is an array of object, we will use JsonArrayRequest. If the data returned is an object, then you can use JsonObjectRequest. In the example code below. After the request is successful, we need to loop and insert each field of the object into an List, then we can pass the List into a RecyclerViewAdapter and show the result in a RecyclerView. After creating a request, add it to the queue by calling VolleySingleton instance.\n\n```\nJsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, REQUEST_URL, null, response -> {\n List<DataModel> data = new ArrayList<>();\n for (int i = 0; i < response.length(); i++) {\n try {\n JSONObject object = response.getJSONObject(i);\n DataModel model = new DataModel(object.getString(\"login\"),\n object.getInt(\"id\"), object.getString(\"avatar_url\"),\n object.getString(\"gravatar_id\"), object.getString(\"url\"),\n object.getString(\"html_url\"), object.getString(\"followers_url\"),\n object.getString(\"following_url\"), object.getString(\"gists_url\"),\n object.getString(\"starred_url\"), object.getString(\"subscriptions_url\"),\n object.getString(\"organizations_url\"), object.getString(\"repos_url\"),\n object.getString(\"events_url\"), object.getString(\"received_events_url\"),\n object.getString(\"type\"), object.getBoolean(\"site_admin\"));\n data.add(model);\n } catch (Exception e) {\n Log.d(TAG, e.toString());\n } finally {\n mAdapter.clearItems();\n mAdapter.addItems(data);\n mAdapter.notifyDataSetChanged();\n }\n }\n }, error -> {\n Log.d(TAG, error.toString());\n });\nVolleySingleton.getInstance(this.getApplicationContext()).addToRequestQueue(request, NETWORK_CALL);\n```\n\n**6. Display Data in Recycler View**\nNow it is time to show data from the API in a RecyclerView. First we need to create a layout for the recycler view holder. In this example I name it ```item_user.xml``` with the following code:\n```\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.AppCompatImageView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:id=\"@+id/user_avatar\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"wrap_content\"\n android:scaleType=\"centerCrop\" />\n```\nThe next step is to bind ```item_user.xml``` to an adapter by overriding the onCreateViewHolder method. Then set the data that we get from API to RecyclerView in the onBindView method. The example code below is an RecyclerViewAdapter.\n```\npublic class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {\n private Context mContext;\n private List<DataModel> mUserData = new ArrayList<>();\n RecyclerViewAdapter(Context context) {\n mContext = context;\n }\n @Override\n public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n return new UserDataViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_user, parent, false));\n }\n @Override\n public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {\n UserDataViewHolder userDataViewHolder = (UserDataViewHolder) holder; VolleySingleton.getInstance(mContext).getImageLoader().get(mUserData.get(position).getAvatar_url(), new ImageLoader.ImageListener() {\n @Override\n public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {\n userDataViewHolder.mUserAvatar.setImageBitmap(response.getBitmap());\n }\n @Override\n public void onErrorResponse(VolleyError error) {\n }\n });\n userDataViewHolder.mUserAvatar.setOnClickListener(v -> mContext.startActivity(new Intent(mContext, MemberActivity.class).\n putExtra(MemberActivity.ARG_LOGIN, mUserData.get(position).getLogin()).\n putExtra(MemberActivity.ARG_ID, mUserData.get(position).getId()).\n putExtra(MemberActivity.ARG_AVATAR_URL, mUserData.get(position).getAvatar_url()).\n putExtra(MemberActivity.ARG_GRAVATAR_ID, mUserData.get(position).getGravatar_id()).\n putExtra(MemberActivity.ARG_URL, mUserData.get(position).getUrl()).\n putExtra(MemberActivity.ARG_HTML_URL, mUserData.get(position).getHtml_url()).\n putExtra(MemberActivity.ARG_FOLLOWERS_URL, mUserData.get(position).getFollowers_url()).\n putExtra(MemberActivity.ARG_FOLLOWING_URL, mUserData.get(position).getFollowing_url()).\n putExtra(MemberActivity.ARG_GISTS_URL, mUserData.get(position).getGists_url()).\n putExtra(MemberActivity.ARG_STARRED_URL, mUserData.get(position).getStarred_url()).\n putExtra(MemberActivity.ARG_SUBSCRIPTIONS_URL, mUserData.get(position).getSubscriptions_url()).\n putExtra(MemberActivity.ARG_ORGANIZATIONS_URL, mUserData.get(position).getOrganizations_url()).\n putExtra(MemberActivity.ARG_REPOS_URL, mUserData.get(position).getRepos_url()).\n putExtra(MemberActivity.ARG_EVENTS_URL, mUserData.get(position).getEvents_url()).\n putExtra(MemberActivity.ARG_RECIEVED_EVENTS_URL, mUserData.get(position).getRecieved_events_url()).\n putExtra(MemberActivity.ARG_TYPE, mUserData.get(position).getType()).\n putExtra(MemberActivity.ARG_SITE_ADMIN, mUserData.get(position).isSite_admin())));\n }\n @Override\n public int getItemCount() {\n return mUserData.size();\n }\n public void addItems(List<DataModel> data) {\n mUserData.addAll(data);\n }\n public void clearItems() {\n mUserData.clear();\n }\n public class UserDataViewHolder extends RecyclerView.ViewHolder {\n private AppCompatImageView mUserAvatar;\n UserDataViewHolder(View itemView) {\n super(itemView);\n mUserAvatar = itemView.findViewById(R.id.user_avatar);\n }\n }\n}\n```\n\nThe result will look like this:\n\n\nFor further usage, you can check out volley repository here: https://github.com/google/volley.\nYou can also check out the example project I made in this tutorial here: https://github.com/steven-tjg/volley-example.\n\n\n<br /><hr/><em>Posted on <a href=\"https://utopian.io/utopian-io/@steven.tjg/how-to-use-volley-in-android-to-make-network-call\">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>",
"json_metadata": "{\"community\":\"utopian\",\"app\":\"utopian/1.0.0\",\"format\":\"markdown\",\"repository\":{\"id\":79936381,\"name\":\"volley\",\"full_name\":\"google/volley\",\"html_url\":\"https://github.com/google/volley\",\"fork\":false,\"owner\":{\"login\":\"google\"}},\"pullRequests\":[],\"platform\":\"github\",\"type\":\"tutorials\",\"tags\":[\"utopian-io\",\"android\",\"tutorial\",\"volley\",\"network\"],\"users\":[\"mipmap\",\"string\",\"style\",\"Override\"],\"links\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1517311899/jwqt9xxijwbr477ojy0v.jpg\"],\"image\":[\"https://res.cloudinary.com/hpiynhbhq/image/upload/v1517311899/jwqt9xxijwbr477ojy0v.jpg\"],\"moderator\":{\"account\":\"shreyasgune\",\"time\":\"2018-01-31T09:48:00.992Z\",\"reviewed\":true,\"pending\":false,\"flagged\":false}}",
"parent_author": "",
"parent_permlink": "utopian-io",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"title": "How to Use Volley in Android to Make Network Call"
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T09:48:00",
"trx_id": "08301ee8c1826f32ce727795cbbc78fdc191e175",
"trx_in_block": 25,
"virtual_op": 0
}calmunicornupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 02:25:51
calmunicornupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 02:25:51
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | calmunicorn |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19447721/Trx f0784597b2cae6fee8402782f802db125e2ad44c |
View Raw JSON Data
{
"block": 19447721,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "calmunicorn",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T02:25:51",
"trx_id": "f0784597b2cae6fee8402782f802db125e2ad44c",
"trx_in_block": 12,
"virtual_op": 0
}calmunicornupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/01/31 02:25:33
calmunicornupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/01/31 02:25:33
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| voter | calmunicorn |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19447715/Trx 41cdf73202f850c8cd2bdd38c900350b2850a7ee |
View Raw JSON Data
{
"block": 19447715,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"voter": "calmunicorn",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T02:25:33",
"trx_id": "41cdf73202f850c8cd2bdd38c900350b2850a7ee",
"trx_in_block": 17,
"virtual_op": 0
}murez-nstupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call2018/01/31 02:13:39
murez-nstupvoted (100.00%) @steven.tjg / how-to-use-volley-in-android-to-make-network-call
2018/01/31 02:13:39
| author | steven.tjg |
| permlink | how-to-use-volley-in-android-to-make-network-call |
| voter | murez-nst |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19447478/Trx a9e56240651c8c7ef585dd598a24a30907d6fe33 |
View Raw JSON Data
{
"block": 19447478,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-use-volley-in-android-to-make-network-call",
"voter": "murez-nst",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T02:13:39",
"trx_id": "a9e56240651c8c7ef585dd598a24a30907d6fe33",
"trx_in_block": 16,
"virtual_op": 0
}steven.tjgclaimed reward balance: 0.003 SP2018/01/31 01:54:00
steven.tjgclaimed reward balance: 0.003 SP
2018/01/31 01:54:00
| account | steven.tjg |
| reward sbd | 0.000 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 4.092392 VESTS |
| Transaction Info | Block #19447086/Trx fd1f08d318e1eacaf636f59daeb95f4590d67a01 |
View Raw JSON Data
{
"block": 19447086,
"op": [
"claim_reward_balance",
{
"account": "steven.tjg",
"reward_sbd": "0.000 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "4.092392 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:54:00",
"trx_id": "fd1f08d318e1eacaf636f59daeb95f4590d67a01",
"trx_in_block": 3,
"virtual_op": 0
}monster-rebornupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
monster-rebornupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | monster-reborn |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx b250b03512ea625d309695da0e137d5937eb34ca |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "monster-reborn",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "b250b03512ea625d309695da0e137d5937eb34ca",
"trx_in_block": 19,
"virtual_op": 0
}lilithupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
lilithupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | lilith |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx 9f4561a063b514999e393b9b6fcab3570829a028 |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "lilith",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "9f4561a063b514999e393b9b6fcab3570829a028",
"trx_in_block": 18,
"virtual_op": 0
}thegrandestineupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
thegrandestineupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | thegrandestine |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx 98791133c3fce500acce6a5498207bc58f2cb6e8 |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "thegrandestine",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "98791133c3fce500acce6a5498207bc58f2cb6e8",
"trx_in_block": 17,
"virtual_op": 0
}retrocausalityupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
retrocausalityupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | retrocausality |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx 602640e1eae6818f45728d57f5a6d95c1dfea57f |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "retrocausality",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "602640e1eae6818f45728d57f5a6d95c1dfea57f",
"trx_in_block": 16,
"virtual_op": 0
}audiosirenupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
audiosirenupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | audiosiren |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx 361d8bfaa81fe52137992d8f90aeec038f9134df |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "audiosiren",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "361d8bfaa81fe52137992d8f90aeec038f9134df",
"trx_in_block": 15,
"virtual_op": 0
}the-reaperupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:13:48
the-reaperupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:13:48
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | the-reaper |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446282/Trx 359c77e1a18cc51f3088cdd202cbf3f68a965d2b |
View Raw JSON Data
{
"block": 19446282,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "the-reaper",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:13:48",
"trx_id": "359c77e1a18cc51f3088cdd202cbf3f68a965d2b",
"trx_in_block": 14,
"virtual_op": 0
}paradoxofchoiceupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
paradoxofchoiceupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | paradoxofchoice |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx 3c66146785baec1b011aa65ccfc25365bf70efa5 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "paradoxofchoice",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "3c66146785baec1b011aa65ccfc25365bf70efa5",
"trx_in_block": 37,
"virtual_op": 0
}love-meupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
love-meupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | love-me |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx aae43b94c5bf17b0ec4d1b54dacf11f8b4e8d0d7 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "love-me",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "aae43b94c5bf17b0ec4d1b54dacf11f8b4e8d0d7",
"trx_in_block": 36,
"virtual_op": 0
}mysticalwordupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
mysticalwordupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | mysticalword |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx 8d1a32d5bb9634c1c3a6b28aac7d0b25cbb2ca9c |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "mysticalword",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "8d1a32d5bb9634c1c3a6b28aac7d0b25cbb2ca9c",
"trx_in_block": 35,
"virtual_op": 0
}mirrorforceupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
mirrorforceupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | mirrorforce |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx ae5afc8e51c764f3a504a9fa6bce44bda0233495 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "mirrorforce",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "ae5afc8e51c764f3a504a9fa6bce44bda0233495",
"trx_in_block": 34,
"virtual_op": 0
}omegacoreupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
omegacoreupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | omegacore |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx 8dc34eb15315de8892f991016a7bb92161dc7e9a |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "omegacore",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "8dc34eb15315de8892f991016a7bb92161dc7e9a",
"trx_in_block": 33,
"virtual_op": 0
}chaostheoryupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
chaostheoryupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | chaostheory |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx cb5f8f04b82bc72fdb602b087cd543bd5ca84c5d |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "chaostheory",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "cb5f8f04b82bc72fdb602b087cd543bd5ca84c5d",
"trx_in_block": 32,
"virtual_op": 0
}butterfly-effectupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
butterfly-effectupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | butterfly-effect |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx b578aad61e55c41a008a33438e880fa943f0edf8 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "butterfly-effect",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "b578aad61e55c41a008a33438e880fa943f0edf8",
"trx_in_block": 15,
"virtual_op": 0
}betacoreupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
betacoreupvoted (100.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | betacore |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19446257/Trx b9cbb1585b633621dd6370b241dfcd0a8afee220 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "betacore",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "b9cbb1585b633621dd6370b241dfcd0a8afee220",
"trx_in_block": 12,
"virtual_op": 0
}alphacoreupvoted (20.00%) @steven.tjg / how-to-implement-seamless-otp-on-android2018/01/31 01:12:33
alphacoreupvoted (20.00%) @steven.tjg / how-to-implement-seamless-otp-on-android
2018/01/31 01:12:33
| author | steven.tjg |
| permlink | how-to-implement-seamless-otp-on-android |
| voter | alphacore |
| weight | 2000 (20.00%) |
| Transaction Info | Block #19446257/Trx 8de47fd328aeb68e9cb0f17650b6f902de675cc9 |
View Raw JSON Data
{
"block": 19446257,
"op": [
"vote",
{
"author": "steven.tjg",
"permlink": "how-to-implement-seamless-otp-on-android",
"voter": "alphacore",
"weight": 2000
}
],
"op_in_trx": 0,
"timestamp": "2018-01-31T01:12:33",
"trx_id": "8de47fd328aeb68e9cb0f17650b6f902de675cc9",
"trx_in_block": 11,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress36.40%
{
"voting_manabar": {
"current_mana": "17273827243",
"last_update_time": 1588954137
},
"downvote_manabar": {
"current_mana": "4318456810",
"last_update_time": 1588954137
},
"rc_account": {
"account": "steven.tjg",
"max_rc": "19294576216",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "21328195992",
"last_update_time": 1588954137
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"name":"Steven","location":"Indonesia","profile_image":"https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg"} |
| JSON METADATA | |
| profile | {"name":"Steven","location":"Indonesia","profile_image":"https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg"} |
{
"posting_json_metadata": {
"profile": {
"name": "Steven",
"location": "Indonesia",
"profile_image": "https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg"
}
},
"json_metadata": {
"profile": {
"name": "Steven",
"location": "Indonesia",
"profile_image": "https://s26.postimg.org/5u0cys9s9/20150910_144612.jpg"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM5YecQd5WyTDm9i91wUKo5uYGo6NBEt4Xjm69spjspDZsaSfK781/1
Active
Single Signature
Public Keys
STM68gq4qwGoFRu9cv9fmpxDikKD9pixNcTT32jWiWpoVPkVzkMFj1/1
Posting
Single Signature
Public Keys
STM8JeGoZdBiDEyZ72Ayn8RewMY4t4Kxvwv3ZYECyECuRCZhNydFr1/1
App Permissions
@utopian.app1/1
Memo
STM6yiWpqPcKUeo3ospn48DstZSJNGcHPyPZYyENWeyYDKnkeMeRZ
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM5YecQd5WyTDm9i91wUKo5uYGo6NBEt4Xjm69spjspDZsaSfK78",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM68gq4qwGoFRu9cv9fmpxDikKD9pixNcTT32jWiWpoVPkVzkMFj",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM8JeGoZdBiDEyZ72Ayn8RewMY4t4Kxvwv3ZYECyECuRCZhNydFr",
1
]
],
"weight_threshold": 1
},
"memo": "STM6yiWpqPcKUeo3ospn48DstZSJNGcHPyPZYyENWeyYDKnkeMeRZ"
}Witness Votes
0 / 30
No active witness votes.
[]