2 Klassen-Zugriff regeln

  • Antworten:6
Dave Vogel
  • Forum-Beiträge: 3

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

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

14.05.2012, 14:26:01 via App

Was sagt die Fehlermeldung denn aus?
Lg Ansgar

Antworten
Dave Vogel
  • Forum-Beiträge: 3

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

Antworten
Markus B.
  • Forum-Beiträge: 636

17.05.2012, 00:19:12 via App

Hi, dann machst du schlichtweg etwas Falsch. Bei der Analyse hilft aber nur der StackTrace.

Gruß,
Markus

Antworten
Felix
  • Forum-Beiträge: 259

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

Antworten
Dave Vogel
  • Forum-Beiträge: 3

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

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

20.05.2012, 17:02:35 via App

Hey,

warum castest du 'null' zum Integer? Hat Eclipse dir das empfohlen? Wobei ich denke, dass selbst Eclipse das merken müsste, dass das nicht geht..
Lg Ansgar

Antworten