Ok, I am not entirely sure what you are doing here, so I will try to explain what I think is wrong.
Main:
myclass1 and f are both Global variables but only initialized in FirstTime. They should always be initialized.
Anyway, as for this example it doesnt matter.
Class1:
OK
functions:
If you want, you can declare dljob within the Class_Globals of functions so you never have to refer to Main, and functions becomes independent of Main.
This was if you do dljob.Initialize("update",Me)
The JobDone will be raised in functions instead of Main.
Now in getData,
you declare another instance of class1 called myclass2. Remember that this instance is difference from the myclass1 you declared in Main. These two have no link. So if you did myclass2.Initialize after declaring it, you would not get a NullPointerException as that would initialize the map in myclass2.
Now depending on your program structure, we need to think whether we need an instance of Class1 inside functions, OR, we have an instance of it in Main and we pass it to functions in the same way we passed the activity.