In Request.finish(), the Runnable is calling toString on itself instead of the Request object:
mainThread.post(new Runnable() {
@Override
public void run() {
mEventLog.add(tag, threadId);
mEventLog.finish(this.toString());
}
});
Should be Request.this.toString()
Also, it would be more robust and leak-resistant if this Runnable were a static nested class that held no reference to the outer Request instance.