Asaf Nevo
Asaf Nevo

Reputation: 11688

android application class in thread

i need to use my application class inside my thread which is started with InterService. in my IntentService i have the following code:

    protected void onHandleIntent(Intent intent) {
    final ResultReceiver receiver = intent.getParcelableExtra("receiver");
    context = getBaseContext();
    app = (AppLoader)getApplicationContext();
    ConnectionThread thread = new ConnectionThread(receiver, context, app.getNewApp());

this is my Thread:

    public ConnectionThread (ResultReceiver receiver, Context context, AppLoader app)
    {

      this.receiver = receiver;
      this.context = context;
      this.activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
      this.app = app;
    }

    @Override
    public void run() {
    Log.d("ConnectionThread","Starting Server Connection");
        try {
            while(isThereActivityRunning()) {
                if(app.isInternetOn())
                {
                    Log.d("ConnectionThread", app.getText());
                    results = sendGetMessage();
                    b.putString("results", results);
                    receiver.send(2, b);
                }

this is my application:

public class AppLoader extends Application{
private AppLoader newApp;

public void onCreate()
{
  super.onCreate();
}

public AppLoader getNewApp()
{
  if(newApp == null)
     newApp = new AppLoader();   
  return newApp;    
}

i get a java.lang.NullPointerException and i can't figure out why..

Upvotes: 1

Views: 384

Answers (1)

Rob Pridham
Rob Pridham

Reputation: 4938

You can't create your own Application instance, i.e.

newApp = new AppLoader();

is not meant to be called. Android creates the app for you, or at least it does if you declared your application class in the manifest, i.e.

<application ... android:label="@string/app_name" android:name="AppLoader" android:debuggable="true">

It will compile but you won't have access to anything that an Android-instantiated application normally would.

Assuming you have the manifest as above, you already have access to the application instance by calling:

app = (AppLoader)getApplicationContext();

so use that and delete the getNewApp() method.

Upvotes: 2

Related Questions