Reputation: 15002
My tableview won't reload data , it only shows noob
but not redreshed data.
Do I missing any steps in my code ?
class ReservoirsScreen < PM::TableScreen
title "I want to refresh"
refreshable
def on_load
@returned_data ||= [{title:'noob'}]
on_refresh
end
def table_data
[{
cells: @returned_data.map do |reservoir|
{
title: reservoir["title"],
action: :select_reservoir,
arguments: { reservoir: reservoir["title"] }
}
end
}]
end
def select_reservoir(reservoir)
PM.logger.info reservoir
end
def on_refresh
start_refreshing
get_reserviors
stop_refreshing
update_table_data
end
def get_reserviors
start_refreshing
url_string = "http://128.199.223.114:10080/"
AFMotion::JSON.get(url_string) do |result|
if result.success?
@returned_data = []
result.object["data"].each do |r|
@returned_data << {
title: [r["reservoirName"], r["immediatePercentage"]].join(":")
}
end
else
@returned_data = ['failed','d']
end
end
stop_refreshing
update_table_data
end
end
Upvotes: 0
Views: 38
Reputation: 124419
AFMotion uses async callbacks, so your code is actually being executed like this:
Instead, move your stop_refreshing
and update_table_data
lines into your callbacks (the if result.success?
/ else
blocks), that way they won't be executed until your JSON response is received:
if result.success?
@returned_data = []
result.object["data"].each do |r|
@returned_data << {
title: [r["reservoirName"], r["immediatePercentage"]].join(":")
}
end
update_table_data
stop_refreshing
else
@returned_data = ['failed','d']
update_table_data
stop_refreshing
end
Upvotes: 2