Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception when I run my application from Eclipse

I've been having this problem for almost 2 months now and can't figure it out. The problem is that if my application is running and I run (reinstall) my application from Eclipse, I get an error message indicating that my application has crashed 'Unfortunately, has stopped.'. I notice that it also occurs when I run it away from my PC/Eclipse, I think that it happens only after I don't run it for a while.

It only occurs if the app is active in the 3rd activity (BaseDiagramActivity) and then I run the app again from Eclipse. I've stripped out basically all the application except the 3 activities and It's still happening.

I've searched and searched for a solution to this problem but can't find any good answer or one that applies to me.

It doesn't seem like a hardware or android version issue as I'm running this on my tablet (4.0.3) and my phone (4.0.2, was happening on 4.0.1 before update). Unless of course it is an ice cream sandwich bug.

Let me know if any more info is required.

The exception (Tag=AndroidRuntime)

FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException    at android.app.LoadedApk.makeApplication(LoadedApk.java:482)    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3938)    at android.app.ActivityThread.access$1300(ActivityThread.java:123)    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)    at android.os.Handler.dispatchMessage(Handler.java:99)    at android.os.Looper.loop(Looper.java:137)    at android.app.ActivityThread.main(ActivityThread.java:4424)    at java.lang.reflect.Method.invokeNative(Native Method)    at java.lang.reflect.Method.invoke(Method.java:511)    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)    at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException    at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362)    at android.app.LoadedApk.getClassLoader(LoadedApk.java:305)    at android.app.LoadedApk.makeApplication(LoadedApk.java:474)    ... 11 more 

The Android Code

LoadedApk.initializeJavaContextClassLoader() - Line 362 seems to be the offender

Below are the relevant files:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="[my package]"     android:versionCode="1"     android:versionName="1.0" >      <uses-sdk android:minSdkVersion="14" />      <application          android:icon="@drawable/ic_launcher"          android:label="@string/app_name" >         <activity              android:name="HomeActivity"              android:label="@string/app_name" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>         <activity android:name="LoadDiagramActivity" android:label="Load Diagram"></activity>         <activity android:name="BaseDiagramActivity" android:label="Base Diagram"></activity>     </application>  </manifest> 

HomeActivity.java

public class HomeActivity extends Activity {     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          setContentView(R.layout.home);          Button diagramButton = (Button)findViewById(R.id.diagram);         diagramButton.setOnClickListener(new View.OnClickListener() {             public void onClick(View v) {                 startActivity(new Intent(HomeActivity.this, LoadDiagramActivity.class));             }         });     } } 

LoadDiagramActivity.java

public class LoadDiagramActivity extends Activity {      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          ActionBar actionBar = getActionBar();         actionBar.setDisplayHomeAsUpEnabled(true);     }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         MenuInflater menuInflater = getMenuInflater();         menuInflater.inflate(R.menu.load_diagram_menu, menu);         return true;     }      @Override     public boolean onOptionsItemSelected(MenuItem item) {         switch (item.getItemId()) {             case android.R.id.home:                 finish();                 return true;             case R.id.add_new_diagram:                 startActivity(new Intent(this, BaseDiagramActivity.class));                 return true;             default:                 return super.onOptionsItemSelected(item);         }     } } 

BaseDiagramActivity.java

it doesn't actually matter what activity this is, the exception occurs as long as a 'third' activity is started (or clicking the add button on LoadDiagramActivity.

public class BaseDiagramActivity extends Activity { } 

home.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation="vertical" >      <Button         android:id="@+id/diagram"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="Diagram" />  </LinearLayout> 

Additional information

When I stripped down my project in order to ask a simpler answer, I moved everything into the package's namespace. In the actual project there are 5 namespaces, they were still present when I was testing with the stripped down version however just not called (as far as I could see).

Here are the packages:

  • [package] - general logic
  • [package].activities - all activities and base activities
  • [package].database - all interaction with the database
  • [package].models - models for saving/loading data
  • [package].renderables - objects drawn to a canvas

I have tried to add an `android:sharedUserId' attribute to the manifest and and it seemed to do nothing both times I tried. When I was initially investigating this I came to the conclusion that the shared user id only applied to different projects, not different packages.

Also I don't believe there was any interaction with the database when I stripped everything down. The fact that the 3rd activity could be any activity, even HomeActivity, was something against this theory.

Useful links

  • stackoverflow: android.app.Application cannot be instantiated due to NullPointerException
  • GreoCode android.app.LoadedApk on 4.0.1
  • Possible race condition?
  • Android issue #25869

Update 1/11/2012

Last couple of days I've jumped back into this project, I created a brand new project in Eclipse Juno (was on Helios before) and transferred everything over manually so that Eclipse and Android tools handled almost all of the Manifest interaction but it's still occurring. I will look at it a bit more over the next few days and update if I find anything.

FYI my new project is targeting the following:

<uses-sdk     android:minSdkVersion="14"     android:targetSdkVersion="15" /> 

The new project structure also has all the activities in the root package now (ie. [package], not [package].activities). I'm also using the (new?) syntax to show the parent activity:

<meta-data     android:name="android.support.PARENT_ACTIVITY"     android:value="[my package].LoadDiagramActivity" /> 

It is also still occurring on my now updated Galaxy Nexus running Jellybean 4.1.2.

like image 474
Daniel Imms Avatar asked Mar 17 '12 00:03

Daniel Imms


People also ask

Why are my Eclipse programs not running?

My program will not build or runMake sure the affected project is open, then go to Project->Preferences. Select the C/C++ Build pane, then make sure the build toolchain is using MinGW, not Cygwin. If you still have trouble running your applications, go back to Project->Preferences and look for the run/debug pane.

How do I fix class not found exception in Eclipse?

click on project->properties->Java build path->Source and check each src folder is still valid exist or recently removed. Correct any missing path or incorrect path and rebuild and run the test. It will fix the problem.

What is Eclipse exception?

Exceptions are special types defined by the exception keyword: exception FooException; Exceptions can be thrown, which returns control flow to the caller. If the exception is not caught by the caller it propagates further. If the exception is never caught it causes a system reset.

How do I fix an Eclipse error?

You have open eclipse. ini file and change -vm path to correct JDK location. In my case it's /Library/Java/JavaVirtualMachines/jdk1. 10.001.


1 Answers

Try adding one more thing in Manifest file, I am sure you have already tried..

<manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="[my package]"      android:versionCode="1"      android:versionName="1.0"     android:sharedUserId="com.mj.app" >  

It seems like in your project you have multiple PACKAGES, like com.package.p1 , com.package.p2 ,com.package.p3..

And while starting you are in p1 and then moves on to p2 - p3... and at that time you try to run it again..so the Android gives you error.

like image 177
MKJParekh Avatar answered Oct 02 '22 11:10

MKJParekh