Skip to content

Instantly share code, notes, and snippets.

@Taishi-Y
Created September 7, 2017 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Taishi-Y/9a1dee7dec40e28de56ea939200520d0 to your computer and use it in GitHub Desktop.
Save Taishi-Y/9a1dee7dec40e28de56ea939200520d0 to your computer and use it in GitHub Desktop.
Rx function on Android
class FeedFragment : Fragment() {
var realmSiteInfo: RealmSiteInfo? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val bundle = this.arguments
realmSiteInfo = bundle.getSerializable(ARG_SITE) as RealmSiteInfo
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater!!.inflate(R.layout.fragment_feed, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initRefresher()
showFeed(realmSiteInfo?.rssUrl!!)
}
fun showFeed(url: String) {
Observable.fromCallable(getMostRecentNews(url))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
setUpFeed((it.entries as MutableList<SyndEntryImpl>))
swipeContainer.isRefreshing = false
},
{
swipeContainer.isRefreshing = false
Log.d("err","errr")
}
)
}
fun initRefresher() {
swipeContainer.setOnRefreshListener(object: SwipeRefreshLayout.OnRefreshListener{
override fun onRefresh() {
showFeed(realmSiteInfo?.rssUrl!!)
}
})
// Configure the refreshing colors
swipeContainer.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light)
}
fun getMostRecentNews(feedUrl: String):() -> SyndFeed {
try {
return {retrieveFeed(feedUrl)}
} catch (e: Exception) {
throw RuntimeException(e)
}
}
@Throws(IOException::class, FeedException::class, FetcherException::class)
private fun retrieveFeed(feedUrl: String): SyndFeed {
val feedFetcher = HttpURLFeedFetcher()
return feedFetcher.retrieveFeed(URL(feedUrl))
}
private fun setUpFeed(entries: MutableList<SyndEntryImpl>) {
rvFeed.layoutManager = LinearLayoutManager(context) as RecyclerView.LayoutManager?
val feedAdapter = FeedAdapter(context, activity, entries)
rvFeed.setHasFixedSize(true)
rvFeed.adapter = feedAdapter
}
companion object {
val ARG_SITE = "arg_site"
fun newInstance(realmSiteInfo: RealmSiteInfo): FeedFragment {
val fragment = FeedFragment()
val args = Bundle()
args.putSerializable(ARG_SITE, realmSiteInfo)
fragment.arguments = args
return fragment
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment