Unable to start activity ComponentInfo

  • Antworten:18
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 07:16:30 via Website

Hi,

ich habe versucht. Admob in meine App zu integrieren und bekomme nun folgenden Fehler im Android Monitor.

06-01 05:09:06.698 2726-2726/com.us.aspirationindex E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.us.aspirationindex, PID: 2726
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.us.aspirationindex/com.us.aspirationindex.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference

Kann mir jemand helfem?

VG

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 07:17:47 via App

Deine ADView mit der du irgendwas machen willst ist null sprich nicht initialisiert.
Hast du findViewById benutzt?
Zeig mal deinen Code

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 07:19:41 via Website

Hi,

ja.

    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice("YOUR_DEVICE_HASH")
            .build();
    mAdView.loadAd(adRequest);

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 07:30:03 via Website

package com.us.aspirationindex;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
Button btneng,btndue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    MobileAds.initialize(getApplicationContext(), "...");


    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice("YOUR_DEVICE_HASH")
            .build();
    mAdView.loadAd(adRequest);


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("");
    btneng= (Button) findViewById(R.id.buttonEng);
    btndue= (Button) findViewById(R.id.buttonDeu);
    btneng.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Constants.langkey=Constants.English;
            InitializeTrails();
        }
    });
    btndue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Constants.langkey=Constants.Duetsch;
            InitializeTrails();

        }
    });
}

private void InitializeTrails() {
    ArrayList<String> temp=new ArrayList<String>();
    if(Constants.langkey.equals(Constants.English)) {

        //dimentions
        Constants.dimentionsArrayList.clear();
        Constants.dimentionsArrayList.addAll(Arrays.asList(getResources().getStringArray(R.array.engDimentions)));
        //dimentions

        //traits

        Constants.traitsArrayList.clear();

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng0)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(1,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng1)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(2,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng2)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(3,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng3)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(4,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng4)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(5,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng5)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(6,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.eng6)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(7,trait));
        }

        //traits
    }
    else
    {

        //dimentions
        Constants.dimentionsArrayList.clear();
        Constants.dimentionsArrayList.addAll(Arrays.asList(getResources().getStringArray(R.array.deuDimentions)));
        //dimentions

        //traits

        Constants.traitsArrayList.clear();

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu0)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(1,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu1)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(2,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu2)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(3,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu3)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(4,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu4)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(5,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu5)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(6,trait));
        }

        temp.clear();
        temp.addAll(Arrays.asList(getResources().getStringArray(R.array.deu6)));
        for (String trait:temp) {
            Constants.traitsArrayList.add(new Trait(7,trait));
        }

        //traits
    }
    Collections.shuffle(Constants.traitsArrayList);
    Constants.Limit=Constants.traitsArrayList.size();
    startActivity(new Intent(this,ExplanationActivity.class));
}

}

— geändert am 01.06.2016, 12:17:19 durch Moderator

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 12:19:44 via Website

Habe mir mal derlaubt die initial AD-ID rauszunehmen.
Diese muss ja nicht unbedingt öffentlich sein ;)

Zum Code: Der passt soweit, abe trotzdem gibt es die View nicht. Bist du sicher, dass es in deinem XML Layout die View mit der ID auch gibt?



Gerade gesehen, du hast garkein setContentView mit drin, also kann es one Layout nicht funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 15:35:20 via Website

Hi,

Danke.

die xml sieht folgendermaßen aus:

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 15:36:15 via Website


xmlns:android="ttp://schemas.android.com/apk/res/android"
xmlns:tools="ttp://schemas.android.com/tools"
xmlns:ads="ttp://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.us.aspirationindex.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <include layout="@layout/toolbar" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main" />

<!--android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" /-->

<RelativeLayout
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="...">
</RelativeLayout>

— geändert am 01.06.2016, 17:10:32 durch Moderator

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 15:38:08 via Website

setContentView habe ich drinnen, bokomme aber den selber Fehler:

FATAL EXCEPTION: main
Process: com.us.aspirationindex, PID: 2574
java.lang.RuntimeException: Unable to start activity ComponentInfo

import com.google.android.gms.ads.AdView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
Button btneng,btndue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    super.onCreate(savedInstanceState);

    MobileAds.initialize(getApplicationContext(), "...");

    AdView mAdView = (AdView) findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice("YOUR_DEVICE_HASH")
            .build();
    mAdView.loadAd(adRequest);

— geändert am 01.06.2016, 17:10:19 durch Moderator

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 15:43:37 via App

Die Ad Viee ist bei dir ein RelatoveLayout.
Sas mísste aber eine com.gms.AdView o.ä.sein..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
pepperonas
  • Forum-Beiträge: 434

01.06.2016, 17:06:40 via Website

Pascals Antwort in Codeform:

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="DIESE NUMMER GEHÖRT IN KEIN FORUM"> // <- Achtung!
</com.google.android.gms.ads.AdView>

— geändert am 01.06.2016, 17:07:55

Open Source

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 17:10:04 via Website

Danke Martin :)

Ich werde die Nummer wieder entfernen, hatte ich vorher übersehen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 17:42:09 via Website

Hi,

ich verstehe nicht, was du meinst.
Kannst du das näher erläutern?

VG

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 17:46:25 via Website

Die Nummer ist von einer Test ad, also kein Stress :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 17:48:00 via Website

Do wie es @pepperonas schon gepostet hat.
Deine ADView ist in deinem XML Layout biser ein RelativeLayout.
Das darf nicht sein, denn ein RelativeLayout hat nicht die eigenschaften einer AdView.
Um den Fehler zu beheben, musst du statt dem relativen Layout eine AdView nutzen.
Den XML Code dazu hast du oben schon gegeben, musst ihn nurnoch anwenden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 17:59:25 via Website

Hi,

danke, ich hab´s umgesetzt und die App läuft wieder, ich bekomme aber wieder diese Fehlermeldung.

06-01 15:53:48.166 2894-2894/com.us.aspirationindex E/SysUtils: ApplicationContext is null in ApplicationStatus
06-01 15:53:49.019 2894-2894/com.us.aspirationindex W/chromium: [WARNING:resource_bundle.cc(285)] locale_file_path.empty()
06-01 15:53:49.066 2894-2894/com.us.aspirationindex E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
06-01 15:53:49.066 2894-2894/com.us.aspirationindex E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)

[ 06-01 15:53:49.068 2894: 2894 D / HostConnection::get() New Host Connection established 0xb4098db0, tid 2894
06-01 15:53:49.382 2894-3097/com.us.aspirationindex W/AudioManagerAndroid: Requires BLUETOOTH permission

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2016, 18:05:40 via Website

Das sagt mir jetzt nichts, ist das Rot markiert?
App läuft ja also kein FC fehler.
Die untere weißt dirch darauf hin, dass die Bluetooth Permission für irgendwas benötigt wird

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
pepperonas
  • Forum-Beiträge: 434

01.06.2016, 18:05:44 via Website

zu erst:

<uses-permission android:name="android.permission.BLUETOOTH"/>

Lädst du noch irgendwelche Libraries?

Wenn die App wegen "E/SysUtils: ApplicationContext is null in ApplicationStatus" nicht abstürzt, würde ich die Sache ignorieren...
Kannst ja eine neue Klasse names DeineApplication mit extends Application überschreiben und dort den Appl.Context in Empfang nehmen - vielleicht geht dann der Fehler weg. Dann musst du die Application aber auch im Manifest nennen, also dort unter dem application-Tag den Eintrag name=".DeineApplication" setzen

So lässt sich ein globaler Context cachen (birgt aber hin und wieder auch Unannehmlichkeiten).

— geändert am 01.06.2016, 18:11:00

Open Source

Antworten
Benjamin Kaiser
  • Forum-Beiträge: 19

01.06.2016, 18:12:09 via Website

Nein.

Das Ding ist nur, dass mein Banner wieder nicht angezeigt wird. Hat das was damit zu tun?

Antworten
pepperonas
  • Forum-Beiträge: 434

01.06.2016, 18:12:50 via Website

MobileAds.initialize(this, "...");

Hehe, damit hat sich dann meine Frage nach den Libraries auch erübrigt :D
Wie gesagt, du könntest der MobileAds-Library auch in deiner Application-Class den Context übergeben... Wie das geht, hab ich ja oben erklärt. Den Context bekämst du dann in der AppClass auch wenn du onCreate überschreibst und dort den Aufruf für die Ads machst (die Info hat oben noch gefehlt)...

— geändert am 01.06.2016, 18:18:51

Open Source

Antworten