Thanks for the continued help.

On Fri, Aug 27, 2010 at 2:22 PM, Dianne Hackborn <hack...@android.com>wrote:

>  The first thing I would look for is any code writing data that could cause
> problems if it was killed in the middle of executing.


That makes sense, but that's also why I'm confused. The main issue I've had,
for which I have nearly 30 reports now in each version of my app in the dev
console, has nothing to do with data access. Unless I'm really missing
something.

I have a base class reference that should be set to the appropriate instance
of a derived class type based on user selection.
These derived type instances come from a manager class, of sorts, that holds
the instances. There is one static instance of this manager class in the app
since it's global, constant data. So it should be initialized, along with
it's internal data it manages, at all times. None of this involves any data
access.

Some pseudocode if it helps:

// In "Manager" class
public Manager
{
 private Map<String, BaseRef> refs = null;

 public Manager()
 {
  refs = new TreeMap<String, BaseRef>();

  // Explicitly add derived instances of BaseRef
  refs.put("Key", new DerivedInstance());

  // add more ...
 }

 public BaseRef get(String key)
 {
  return refs.get(key);
 }
}

//In Static access class
public StaticClass
{
 private static Manager manager = new Manager();

 public static Manager getManager() { return manager; }
}

// Then, finally, in the class where the crash occurs
BaseRef baseRef = StaticClass.getManager().get(userSelection);


"Userselection" is the value chosen by the user from a list pre-populated by
the Keys in the Manager class to begin with.
So if the user was able to make the selection, the key was there at the
start of the Activity, and in the manager where it originated from.

baseRef, which is obtained from that single manager's list (which is
essentially hard-coded), is later used elsewhere and ends up being null.

There is no file data access involved anywhere in this Activity besides
using SharedPreferences for exactly one option.

Also, now that I've typed this out, this goes against the idea that statics
are the problem since I would have had the null pointer at the point where I
try to access the Manager class. Instead, it appears to be valid but for
some reason its internal data, which is set on construction, is not.

It's worth noting that I've seen this problem to a lesser extent before I
added this manager class stuff, but since adding it last week, the problem
seems to have exploded with a fury. But again, not sure if that's a result
of a larger user-base over two months since last major update.

I think at some point I'll start polling my users to see how many of them
continue to see the issue after updating. Since I've instructed them, in
nice big letters, to try uninstalling first, I expect not to hear any more
complaints for now, but I'd rather fix the problem than band-aid it like
this.

-------------------------------------------------------------------------------------------------
TreKing <http://sites.google.com/site/rezmobileapps/treking> - Chicago
transit tracking app for Android-powered devices

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to