2 Klassen-Zugriff regeln

  • Antworten:6
  • OffenNicht stickyNicht beantwortet

14.05.2012 09:42:07 via Website

Tag zusammen,

ich hab folgendes Problem.
Ich habe eine Activity Klasse die ja autaomatisch implementiert wird wenn ich das Projekt neu anlege und eine selbst erstellte Klasse namens "Test". In dieser "Test" Klasse lege ich eine Datenbank (SQLite) an mithilfe der Methode

private void onCreateDBAndDBTabled()

Nun möchte ich diese Methode in der Activity Klasse aufrufen, bekomme dabei aber immer eine NullPointerException. Wenn ich den SQLite Code komplett in die Activity Klasse schreibe funktoniert die Datenbank Problemlos, ich würd sie aber halt gern in die Test Klasse zwecks Übersichtlichkeit auslagern....

Ich erhalte keinerlei Fehlermeldung in Eclipse selbe, sondern erst wenn ich den Emulator starte....

16.05.2012 15:50:29 via Website

Die Fehlermeldung lautet "Unable to start Activity" und dann folgt ne lange Liste.... ich werde sie später mal reinkopieren wenn ich an meinem rechner sitze.

Grundsätzlich kann es doch aber nicht der Sinn sein das ich meinen ganzen Code in 1 Activity quetsche. Ich würde einfach nur gerne meine ganzen Code zu meiner SQLite Datenbank in eine extra Klasse schreiben und mit der Activity dann verbinden. Leider funktioniert das nicht. Nur wenn der ganze Code direkt in der Activity Klasse steht klappt alles super....

17.05.2012 13:42:43 via Website

Dave Vogel
private void onCreateDBAndDBTabled()

Nun möchte ich diese Methode in der Activity Klasse aufrufen, bekomme dabei aber immer eine NullPointerException.

Wie genau rufst du denn diese Methode auf? Solange sie nicht statisch ist, brauchst du zunächst erstmal eine Instanz der Klasse.

1Test db;
2db.onCreateDBAndDBTabled();

So kann das nicht funktionieren, weil db nicht initialisiert wurde und immer noch null ist.

1Test db = new Test();
2db.onCreateDBAndDBTabled();

So wird beispielsweise ein Schuh draus. Das ist aber unverzichtbares Java-Grundlagenwissen.


Felix.

— geändert am 17.05.2012 13:43:12

20.05.2012 15:00:48 via Website

Also hier mal mein Code der ActivityKlasse:

1public class CaptnCookActivity extends Activity {
2 /** Called when the activity is first created. */
3
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6
7 super.onCreate(savedInstanceState);
8
9 Testklasse te = new Testklasse();
10 // Bei diesem Aufruf kommt eine NullpointerException
11 te.onCreateDBAndDBTabled(this);
12 setContentView(te.getNeueView(this));
13 }

und hier der Code der Testklasse:
1public class Testklasse{
2
3 // Beim Aufruf dieser Methode aus der ActivityKlasse folgt eine NullpointerException
4 public void onCreateDBAndDBTabled(Context con) {
5 SQLiteDatabase myDB = null;
6 try {
7 myDB = con.openOrCreateDatabase("CaptnTest", (Integer) null, null);
8 myDB.execSQL("CREATE TABLE .... ");
9 } finally {
10 if (myDB != null)
11 myDB.close();
12 }
13 }
14
15 // Diese Methode kann ich fehlerfrei aus der ActivityKlasse aufrufen
16 public TextView getNeueView(Context con){
17 TextView tv = new TextView(con);
18 tv.setText("Hallo das kommt von der Testklasse ");
19 return tv;
20 }
21}

Beim Aufruf der onCreateDBAndDBTabled(Context con) - Methode erhalte ich dieses Log:

05-20 12:49:00.565: D/AndroidRuntime(485): Shutting down VM
05-20 12:49:00.565: W/dalvikvm(485): threadid=1: thread exiting with uncaught exception (group=0x40014760)
05-20 12:49:00.678: E/AndroidRuntime(485): FATAL EXCEPTION: main
05-20 12:49:00.678: E/AndroidRuntime(485): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.Captn.Cook/my.Captn.Cook.CaptnCookActivity}: java.lang.NullPointerException
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.os.Looper.loop(Looper.java:126)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread.main(ActivityThread.java:3997)
05-20 12:49:00.678: E/AndroidRuntime(485): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 12:49:00.678: E/AndroidRuntime(485): at java.lang.reflect.Method.invoke(Method.java:491)
05-20 12:49:00.678: E/AndroidRuntime(485): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-20 12:49:00.678: E/AndroidRuntime(485): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-20 12:49:00.678: E/AndroidRuntime(485): at dalvik.system.NativeStart.main(Native Method)
05-20 12:49:00.678: E/AndroidRuntime(485): Caused by: java.lang.NullPointerException
05-20 12:49:00.678: E/AndroidRuntime(485): at my.Captn.Cook.Testklasse.onCreateDBAndDBTabled(Testklasse.java:15)
05-20 12:49:00.678: E/AndroidRuntime(485): at my.Captn.Cook.CaptnCookActivity.onCreate(CaptnCookActivity.java:17)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
05-20 12:49:00.678: E/AndroidRuntime(485): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
05-20 12:49:00.678: E/AndroidRuntime(485): ... 11 more

Könnt ihr mir sagen an was das liegt???