Android Android-App Crash - Unable to start activity ComponentInfo

pascal.s

Neues Mitglied
Hallo,

bin momentan dabei meine erste eigene App zu programmieren und komme bei einem Problem einfach nicht weiter:

Ich habe in meiner MainActivity verschiedene Methoden erstellt, die Buttons erstellen sollen (Daten aus einer Datenbank ausgelesen --> Buttons dazu erstellt). Diese habe ich auch schon erfolgreich geschafft zu erstellen, doch musste dazu immer zuerst auf einen anderen Button klicken, damit ich eben die erste dazu nötige Methode (getData()) starte.

Jetzt will ich aber, dass diese Methode eben schon beim Öffnen der App gestartet wird und so direkt die Buttons erzeugt werden.

Wichtig zu wissen wäre vielleicht noch, dass ich über einen PagerAdapter zwei Fragmente in einer Aktivität implementiert habe, also damit ich eben durch ein Wischen auf die andere Seite komme.

Dabei habe ich immer einen Error bekommen, egal, was ich probiert habe. (Statisch oder nicht statisch, mit oder ohne View, aus onCreate in MainActivity oder FragmentProfile.java aufgerufen...)

Hier onCreate und getData (also die relevanten Methoden) aus der MainActivity:

Code:
ViewPager viewpager;
    TextView name_test;
    dbhelper dbhelper;
    Context context = this;
    SQLiteDatabase db;

    private ArrayList<Button> profile_button;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewpager = (ViewPager) findViewById(R.id.pager);
        PagerAdapter padap = new PagerAdapter(getSupportFragmentManager());
        viewpager.setAdapter(padap);
        View view = findViewById(R.id.fragment_Profile);
        getData(view);
    }

    public void getData(View view) {
        final MainActivity main = new MainActivity();

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        RelativeLayout.LayoutParams paramsII = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 3);

        Button create_button = new Button(this);

        ImageView line = new ImageView(this);
        this.create_newProfile_Button(create_button, 100, params, paramsII, 100, 80, 0, 0, 18, "NEW PROFILE", line);


        try {
            this.dbhelper = new dbhelper(this.context);
            this.db = this.dbhelper.getReadableDatabase();

            Cursor cursor;

            this.db.rawQuery("SELECT * from profiles", null);
            cursor = this.db.rawQuery("SELECT * from profiles", null);

            cursor.moveToLast();
            Integer maxid = cursor.getInt(0);


            String title[] = new String[maxid];
            Integer ringtone[] = new Integer[maxid];
            Integer media[] = new Integer[maxid];
            Integer alarm[] = new Integer[maxid];
            String vibration[] = new String[maxid];
            Integer brightness[] = new Integer[maxid];
            String autobright[] = new String[maxid];
            String wlan[] = new String[maxid];
            String bluetooth[] = new String[maxid];
            String psm[] = new String[maxid];

            Button pb[] = new Button[maxid];
            ImageView underline[] = new ImageView[maxid];

            cursor.moveToFirst();

            for (int n = 0; n < maxid; n++) {
                title[n] = cursor.getString(1);
                ringtone[n] = cursor.getInt(2);
                media[n] = cursor.getInt(3);
                alarm[n] = cursor.getInt(4);
                vibration[n] = cursor.getString(5);
                brightness[n] = cursor.getInt(6);
                autobright[n] = cursor.getString(7);
                wlan[n] = cursor.getString(8);
                bluetooth[n] = cursor.getString(9);
                psm[n] = cursor.getString(10);

                this.createButton(pb[n], n, params, paramsII, 100, 80, 140 * (n + 1), 0, 18,
                        title[n], ringtone[n], media[n], alarm[n], vibration[n], brightness[n],
                        autobright[n], wlan[n], bluetooth[n], psm[n],
                        underline[n]);

                System.out.println(n + ". Button hinzugefügt");

                cursor.moveToNext();
            }
        } catch (Exception e) {
            Log.e("DATABASE ERROR", "NO DATA");
        }
    }

Hier der Code vom PagerAdapter:

Code:
public class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {
            case 0:
                return new FragmentProfile();
            case 1:
                return new FragmentRules();
            default:
                break;
        }
        return null;
    }

    @Override
    public int getCount() {
        return 2;
    }
}

Vom FragmentProfile.java (also der eine Teil der zwei Aktivitäten, die durch den PagerAdapter verbunden sind)

Code:
public class FragmentProfile extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_profile, container, false);
    }
}

Und zu guter letzt noch die Error Meldung beim aktuellen Code (wie gesagt, hab schon verschiedenes probiert und auch unterschiedliche Error-Meldungen gehabt):

Code:
24675-24675/de.ps2406.apc.autoprofile E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: de.ps2406.apc.autoprofile, PID: 24675
    java.lang.RuntimeException: Unable to start activity ComponentInfo{de.ps2406.apc.autoprofile/de.ps2406.apc.autoprofile.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View)' on a null object reference
            at de.ps2406.apc.autoprofile.MainActivity.create_newProfile_Button(MainActivity.java:170)
            at de.ps2406.apc.autoprofile.MainActivity.getData(MainActivity.java:82)
            at de.ps2406.apc.autoprofile.MainActivity.onCreate(MainActivity.java:70)
            at android.app.Activity.performCreate(Activity.java:5958)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)


Wäre super, wenn ihr mir weiterhelfen könntet 🙂

Danke schonmal im Vorraus!

Pascal
 
Die Fehlermeldung wird in der newProfile_Button Methode geworfen.

Ich würde dir auf jedenfall empfehlen dir noch ein zwei Tutorials oder noch besser https://developer.android.com/training/index.html zu lesen

Code:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View)' on a null object reference
            at de.ps2406.apc.autoprofile.MainActivity.create_newProfile_Button(MainActivity.java:170)
            at de.ps2406.apc.autoprofile.MainActivity.getData(MainActivity.java:82)
            at de.ps2406.apc.autoprofile.MainActivity.onCreate(MainActivity.java:70)

Sowas wie MainActivity main = new MainActivity() gehört sich in Android nicht.


Grüße
 
Zuletzt bearbeitet:
Die Fehlermeldung wird in der newProfile_Button Methode geworfen.

Ich würde dir auf jedenfall empfehlen dir noch ein zwei Tutorials oder noch besser https://developer.android.com/training/index.html zu lesen

Code:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.addView(android.view.View)' on a null object reference
            at de.ps2406.apc.autoprofile.MainActivity.create_newProfile_Button(MainActivity.java:170)
            at de.ps2406.apc.autoprofile.MainActivity.getData(MainActivity.java:82)
            at de.ps2406.apc.autoprofile.MainActivity.onCreate(MainActivity.java:70)

Sowas wie MainActivity main = new MainActivity() gehört sich in Android nicht.


Grüße


Erstmal danke für die Antwort!

Kannst du mir eventuell noch genauer sagen, was mit dieser Methode nicht stimmt? 🙂

Mit der MainActivity main, das habe ich nur gemacht, weil in irgendnem Forum bei nem anderem Fall stand, dass das helfen solle...

Und auch danke für den Tutorial Tipp! 🙂
 

Zurück
Oben