You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Dec 7, 2019. It is now read-only.
I am using many stores with a disk cache, usually I define the PathResolver as a toString of the parameters. Using this pathResolver there is an error when two stores use the same input parameter. This case can happen, for example in my app I have a store to retrieve the weather condition and another to retrieve the forecast, both stores have the city as input.
The problem can be reproduced using this Activity:
data class Weather(val weather: String)
data class Forecast(val forecast: String)
class StoreTestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val weatherStore = StoreBuilder.parsedWithKey<String, BufferedSource, Weather>()
.fetcher { Single.just(Buffer().writeUtf8("""{"weather":"abc"}""")) }
.persister(FileSystemPersister.create(FileSystemFactory.create(filesDir), { it }))
.parser(GsonParserFactory.createSourceParser(Gson(), Weather::class.java))
.open()
val forecastStore = StoreBuilder.parsedWithKey<String, BufferedSource, Forecast>()
.fetcher { Single.just(Buffer().writeUtf8("""{"forecast":"def"}""")) }
.persister(FileSystemPersister.create(FileSystemFactory.create(filesDir), { it }))
.parser(GsonParserFactory.createSourceParser(Gson(), Forecast::class.java))
.open()
val textView = TextView(this)
setContentView(textView)
weatherStore.get("myCity")
.flatMap { weather -> forecastStore.get("myCity").map { forecast -> weather to forecast } }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
textView.text = it.toString()
}, {
it.printStackTrace()
})
}
}
Unfortunately I don't get an error but the forecast fields are null (even if are defined as not nullable in the Kotlin class!):
(Weather(weather=abc), Forecast(forecast=null))
The problem can be fixed easily using a prefix in the string returned by PathResolver.
The text was updated successfully, but these errors were encountered:
Another option here could be to use different flatDir for each different Store. Or, as you proposed, it could be nice to add a newPathResolver subclass that uses the Store name as a prefix (or containing directory, similar to how BarCodeReadAllPathResolver works). Feel free to submit a PR if this is something you're interested in.
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
I am using many stores with a disk cache, usually I define the
PathResolver
as atoString
of the parameters. Using this pathResolver there is an error when two stores use the same input parameter. This case can happen, for example in my app I have a store to retrieve the weather condition and another to retrieve the forecast, both stores have the city as input.The problem can be reproduced using this Activity:
Unfortunately I don't get an error but the forecast fields are null (even if are defined as not nullable in the Kotlin class!):
The problem can be fixed easily using a prefix in the string returned by
PathResolver
.The text was updated successfully, but these errors were encountered: