Ben Ben - 20 days ago 5
Android Question

comparing android intent objects

I have 2 android intent objects that can be persisted as URLs and then rehydrated back into intent objects. I'm wondering what is the most effective way to compare any 2 intent objects to ensure that they end up resolving to the same activity with the same parameters etc. Using

intent.filterEquals
does this, but it does not include the extras.

Currently my code for the
equals
method looks like this:

Intent a = Intent.parseUri(this.intentUrl,
Intent.URI_INTENT_SCHEME);

Intent b = Intent.parseUri(other.intentUrl,
Intent.URI_INTENT_SCHEME);
if (a.filterEquals(b)) {
if (a.getExtras() != null && b.getExtras() != null) {
for (String key : a.getExtras().keySet()) {
if (!b.getExtras().containsKey(key)) {
return false;
} else if (!a.getExtras().get(key)
.equals(b.getExtras().get(key))) {
return false;

}
}
}
// all of the extras are the same so return true
return true;
} else { return false; }


But is there a better/cleaner way?

Answer

That's probably as good as it gets, at least conceptually. However, I don't think your algorithm covers cases where b has a key that a does not.

I'd get both keySet() values and run an equals() on those, to confirm they both have the same keys. Then, iterate over one and run equals() on the value pair.