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:
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");
}
}
Alles anzeigen
Hier der Code vom PagerAdapter:
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;
}
}
Alles anzeigen
Vom FragmentProfile.java (also der eine Teil der zwei Aktivitäten, die durch den PagerAdapter verbunden sind)
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):
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)
Alles anzeigen
Wäre super, wenn ihr mir weiterhelfen könntet [Blockierte Grafik: http://www.java-forum.org/styles/default/xenforo/clear.png]
Danke schonmal im Vorraus!
Pascal