Vraag Uitzondering wanneer ik mijn applicatie gebruik van Eclipse


Ik heb dit probleem nu bijna 2 maanden en kan het niet uitvinden. Het probleem is dat als mijn toepassing wordt uitgevoerd en ik mijn toepassing vanuit Eclipse opnieuw installeer, ik een foutbericht krijg met de melding dat mijn toepassing is gecrasht 'Helaas is gestopt'. Ik merk dat het ook voorkomt wanneer ik het wegloop van mijn pc / Eclipse, ik denk dat het gebeurt alleen nadat ik het een tijdje niet heb gebruikt.

Het gebeurt alleen als de app actief is in de 3e activiteit (BaseDiagramActivity) en vervolgens voer ik de app opnieuw uit vanuit Eclipse. Ik heb in principe alle applicaties verwijderd behalve de 3 activiteiten en het gebeurt nog steeds.

Ik heb gezocht naar en gezocht naar een oplossing voor dit probleem, maar kan geen goed antwoord vinden of een antwoord dat op mij van toepassing is.

Het lijkt geen probleem met een hardware- of Android-versie, omdat ik dit op mijn tablet gebruik (4.0.3) en mijn telefoon (4.0.2 gebeurde op 4.0.1 vóór de update). Tenzij het natuurlijk een broodje ijs is.

Laat me weten of er meer informatie nodig is.

De uitzondering (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

De Android-code

LoadedApk.initializeJavaContextClassLoader () - Lijn 362 lijkt de dader te zijn

Hieronder staan ​​de relevante bestanden:

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

het maakt eigenlijk niet uit welke activiteit dit is, de uitzondering doet zich voor zolang een 'derde' activiteit wordt gestart (of klikken op de knop Toevoegen op 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>

Extra informatie

Toen ik mijn project uit elkaar haalde om een ​​eenvoudiger antwoord te vragen, verplaatste ik alles naar de naamruimte van het pakket. In het eigenlijke project waren er 5 namespaces, ze waren nog steeds aanwezig toen ik aan het testen was met de uitgeklede versie, maar gewoon niet geroepen (voor zover ik kon zien).

Dit zijn de pakketten:

  • [package] - algemene logica
  • [package].activities - alle activiteiten en basisactiviteiten
  • [package].database - alle interactie met de database
  • [package].models - modellen voor het opslaan / laden van gegevens
  • [package].renderables - objecten op een doek getekend

Ik heb geprobeerd om een ​​`android: sharedUserId 'attribuut toe te voegen aan het manifest en het leek beide keren niets te doen dat ik probeerde. Toen ik dit in eerste instantie aan het onderzoeken was, kwam ik tot de conclusie dat de gedeelde gebruikers-ID alleen van toepassing was op verschillende projecten, niet op verschillende pakketten.

Ik geloof ook niet dat er enige interactie met de database was toen ik alles neerhaalde. Het feit dat de 3e activiteit elke activiteit kon zijn, zelfs HomeActivity, was iets tegen deze theorie.

Handige links

Update 1/11/2012

De laatste paar dagen ben ik terug gesprongen in dit project, heb ik een nieuw project in Eclipse Juno gemaakt (was eerder op Helios) en heb ik alles handmatig overgezet, zodat Eclipse en Android-tools bijna alle interactie met Manifest hebben afgehandeld, maar het gebeurt nog steeds . Ik zal er de komende dagen wat meer naar kijken en updaten als ik iets vind.

Ter informatie: mijn nieuwe project is gericht op het volgende:

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

De nieuwe projectstructuur heeft nu ook alle activiteiten in het rootpakket (dwz [pakket], niet [pakket] .activiteiten). Ik gebruik ook de syntaxis (nieuw?) ​​Om de bovenliggende activiteit te tonen:

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

Het gebeurt ook nog steeds op mijn nu bijgewerkte Galaxy Nexus met Jellybean 4.1.2.


42
2018-03-17 00:20


oorsprong


antwoorden:


Voeg nog een ding toe aan het Manifest-bestand, ik weet zeker dat je het al hebt geprobeerd ..

<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" > 

Het lijkt erop dat je in je project meerdere PAKKETTEN hebt, zoals com.package.p1 , com.package.p2 ,com.package.p3..

En terwijl je begint, zit je erin p1 en gaat dan verder met p2 - p3... en op dat moment probeer je het opnieuw uit te voeren ... dus de Android geeft je een foutmelding.


9
2018-04-06 13:34



Als je zet 13 in uw minSdkVersion, het zou moeten werken.

Of dat, of je moet het doen setDisplayHomeAsUpEnabled(false) in de onCreate() van uw andere activiteiten.

Beide oplossingen zouden moeten werken.

Beginnend bij API Level 14 volgens de documentatie, de setHomeButtonEnabled(true) wordt standaard niet meer voor je gedaan, en het gaat verder

Als u de weergavemogelijkheid DISPLAY_HOME_AS_UP instelt, wordt de startknop automatisch ingeschakeld.

Dus we kunnen dat afleiden setDisplayHomeAsUpEnabled(false) werkt op dezelfde manier als setHomeButtonEnabled(false)


2
2018-04-04 02:13



Als ik me niet vergis, gebeurt dit alleen wanneer we de app opnieuw installeren vanuit Eclipse Run-> As. Het is dus onwaarschijnlijk dat dit gebeurt wanneer een gebruiker een upgrade uitvoert via Play. Ik kan dit met vertrouwen zeggen, omdat ik mijn app ook heb opgemerkt met deze uitzondering tijdens het opnieuw installeren via Eclipse, maar niets over Crittercism.

Om dit op te lossen, werkte ik aan het oplossen van het geheugengebruik van mijn app.

  1. Als je maar 1 set drawables hebt, verander dat dan. Maak een drawables-mdpi en kopieer het hele bestand uit die 1 map drawables (drawables, drawable-ldpi). Als je slechts één set hebt, zal Android het formaat wijzigen voor gebruik op grotere schermen, waardoor intern te veel geheugen in beslag wordt genomen, en opruimen van dit soort geheugen (bitmap) is foutgevoelig. Klinkt gek, maar doet wonderen. Geloof me niet, voer het uit onder Heap-geheugengebruikswacht voor en na deze wijziging, u zult merken dat uw app 25% minder geheugen nodig heeft voor een veelvoorkomend scenario.
  2. Als u Bitmap-bewerkingen uitvoert, kunt u overwegen om te verkleinen. Tenminste als je opties instelt, wil je het zeker downscalen. Controleren hier en hier. Zoeken of downscaleing.
  3. Eindelijk vergeet niet om bitmap.recycle(); bitmap = null; in je onDestroy en vóór alle System.exit (0).

Android doet veel achtergrondwerk en herinstallatie is een abrupte opruimingsverwachting van de app. Geheugen dat niet is opgeruimd, kan problemen veroorzaken. Deze uitzondering is er een van internal degenen. Dus denk niet dat het eenvoudig is.


2
2017-11-05 18:41



U hebt de periode niet toegevoegd aan de namen van uw activiteiten in manifesten android:name attributen. Misschien veroorzaakt dit het probleem.


0
2018-04-03 07:01



Wacht tot uw toepassing vastloopt wanneer u hem de tweede keer uitvoert. De app wordt na het opnieuw crashen gestart. Dit gebeurt soms met mij. Als hetzelfde het geval is, vergeet u niet om uw project altijd schoon te maken voordat u het uitvoert.


0
2017-11-06 10:14



Door je code te inspecteren, heb ik het gevoel dat je overslaat om in te stellen "setContentView(rid)" in LoadDiagramActivity. Probeer de weergave in te stellen onCreate().

Ik hoop dat dit je zal helpen.


0
2017-11-06 13:03



U moet "." Toevoegen voor de activity naam in Menifest.

Soortgelijk

<?xml version="1.0" encoding="utf-8"?>

<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>

Ik update de activiteit van je menifest. Controleer het alstublieft...


0
2017-11-06 13:07