(Anfängerproblem) Aus zwei Apps mach eine

D

Der Nat

Neues Mitglied
0
Hallo Liebe Community,

für ein Hochschulprojekt möchte ich mich in die Entwicklung von Android-Apps einarbeiten.

Ich habe schon einige Programmiererfahrung in C++. Softwareentwicklung, Java und Android sind aber noch ziemliches Neuland für mich.

Nun wollte ich probieren, zwei ansich funktionierende Apps zu einer zusammenzubasteln.
In der neuen MainActivity soll eine Wahlmöglichkeit erscheinen, um so auf die jeweiligen Activities zu wechseln. Dazu habe ich die einzelnen Datein (Layouts, Activities, values) mit Bedacht zusammenkopiert und an das neue Projekt angepasst.
Irgendwo hab ichs aber wohl verbockt, da ich die App zwar starten kann (ist also nix unterringelt) stürzt mir aber sofort wieder ab.

Meine Hoffnung ist nun, dass mir anhand des Logs jemand einen Tipp geben kann, wo's noch hakt. Ich werde nämlich da nicht so richtig schlau draus. Bei Bedarf kann ich natürlich auch noch sämtlichen anderen Code posten, mir gehts jedoch eher darum, die Fehlerhinweise zu verstehen.
Code:
11-02 19:23:17.404: E/AndroidRuntime(27152): FATAL EXCEPTION: main
11-02 19:23:17.404: E/AndroidRuntime(27152): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zweiapps/com.example.zweiapps.ZweiappsActivity}: java.lang.NullPointerException
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2020)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2124)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread.access$600(ActivityThread.java:135)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1248)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.os.Looper.loop(Looper.java:137)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread.main(ActivityThread.java:4645)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at java.lang.reflect.Method.invokeNative(Native Method)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at java.lang.reflect.Method.invoke(Method.java:511)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at dalvik.system.NativeStart.main(Native Method)
11-02 19:23:17.404: E/AndroidRuntime(27152): Caused by: java.lang.NullPointerException
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.content.ComponentName.<init>(ComponentName.java:75)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.content.Intent.<init>(Intent.java:3297)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at com.example.zweiapps.ZweiappsActivity.<init>(ZweiappsActivity.java:24)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at java.lang.Class.newInstanceImpl(Native Method)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at java.lang.Class.newInstance(Class.java:1319)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
11-02 19:23:17.404: E/AndroidRuntime(27152):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2011)
11-02 19:23:17.404: E/AndroidRuntime(27152):     ... 11 more
Da mir dieses händische Ineinanderfügen jedoch generell etwas unprofessionell wirkt frage ich mich, wie man das wohl besser machen könnte. Wie geht man vor, wenn man beispielsweiße mit mehrern Personen an einer App entwickelt?
 
Zeile 24 von ZweiappsActivity? Da entsteht eine nullpointerexception

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Hast du den alten package name auf jeder Seite zum neuen umbenannt?
 
Hallo,

genau solche Hinweise hatte ich mir erhofft, danke. :smile:

Ja, die package names habe ich angepasst. Darüber hinaus habe ich die activiteis im Minifest angemeldet, die values angepasst und dafür gesorgt, dass es bei den IDs keine Namenskonflikte gibt.

Der Hinweis auf Zeile 24 ist gut. Die ZweiappsActivity.java sieht so aus:

Code:
package com.example.zweiapps;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ZweiappsActivity extends Activity
{

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.zweiapps);
        Button fak = (Button) findViewById(R.id.fak);
        Button polar = (Button) findViewById(R.id.polar);
        fak.setOnClickListener(fakListener);
        polar.setOnClickListener(polarListener);
        
    }
[COLOR=Red]        final Intent fakintent = new Intent(this, FakMainActivity.class);[/COLOR]
        final Intent polarintent = new Intent(this, PolarMainActivity.class);
        
        OnClickListener fakListener = new OnClickListener()
              {@Override public void onClick(View v){startActivity(fakintent);}};
        
        OnClickListener polarListener = new OnClickListener()
            {@Override public void onClick(View v){startActivity(polarintent);}};

        
}
Zeile 24 ist der der rot-markierte Intent.
Was mir gerade erst auffällt, ich hab vergessen, den OnClickListener zu implementieren. Warum mault Eclipse da nicht? Wenn ich ihn implemetiere, ändert das allerdings auch nix.

Irgendwelche grundlegenden Programmierfehler hier?
 
Hi,

selbstverständlich hat jeder sein eigenen Programmierstiel. Aber was du da machst sieht sehr... sehr komisch aus :)

Also mal zwei Tipps:
- Entweder den onClickListener implemtieren.
Code:
public class ZweiappsActivity extends Activity implements OnClickListener
....
@Override
public void onClick(View v) {
}
- Oder jedesmal einen neuen Listener zu einem Objekt.
Code:
fak.setOnClickListener(new View.onClickListener() {
   public void onClick(View v) {
   }
}

Nur mal so am Rande ;)
Und Str+Alt+O (O nicht null) kannst du auch ab und an mal drücken ;)
Str+Alt+F schadet auch nie!! ^^

Desweiteren ist fakintent anscheinen null. Warum? :D
Glaube es wird nie implementiert... du kannst mal folgendes versuchen.
Code:
Intent fakeintent;

...onCreate(...) {
   this.fakeintent = new Intent(this, FakeMainActivity.class);
}

Gruß
 
  • Danke
Reaktionen: Der Nat
Desweiteren ist fakintent anscheinen null. Warum? :D
Glaube es wird nie implementiert... du kannst mal folgendes versuchen.
Code:
Intent fakeintent;

...onCreate(...) {
   this.fakeintent = new Intent(this, FakeMainActivity.class);
}
Halleluja! Es funktioniert! Danke! Dann eben so. :)
Ich versteh zwar nicht, was an
Code:
final Intent  intent = new Intent(this, Activity.class);
falsch ist, aber was solls...

selbstverständlich hat jeder sein eigenen Programmierstiel. Aber was du da machst sieht sehr... sehr komisch aus :)
Du meinst wegen der Formatierung? Ja, für die wurde ich schon wiederholt gerügt. :D
Ansonstens ists wohl eher Unfähigkeit als eigener Stil...:glare:

Also mal zwei Tipps:
- Entweder den onClickListener implemtieren.
- Oder jedesmal einen neuen Listener zu einem Objekt.
Hab bisher noch nicht mit Interfaces gearbeitet, mitlerweile ists mir klar, danke. :)

Eine Frage bleibt: Wie kann man zwei unterschiedliche Projekte eleganter zu einem vereinen?
 
Zuletzt bearbeitet:
Du suchst nach "Caused by" im Log und dann findest du meistens deine Klasse auch. Die steht dann so da: "ZweiappsActivity.Java:24" die 24 ist deine Zeile.

Du könntest eine APP als library deklarieren und in die andere einbinden. Ist aber eher unschön wenn es schon zwei fertige apps sind.
Ansonsten gibts es eventuell ein tool, kenne aber selber keins.

Gesendet von meinem Nexus 5 mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: Der Nat
Du suchst nach "Caused by" im Log und dann findest du meistens deine Klasse auch. Die steht dann so da: "ZweiappsActivity.Java:24" die 24 ist deine Zeile.
Man hätte drauf kommen können. :rolleyes2: Dankeschön!
Du könntest eine APP als library deklarieren und in die andere einbinden. Ist aber eher unschön wenn es schon zwei fertige apps sind.
Ansonsten gibts es eventuell ein tool, kenne aber selber keins.
Wir werden demnächst mit mehreren Personen an einer Hochschulapp arbeiten. Diese wird im Endeffekt aus vielen "kleineren" Funktionen bestehen, die abschließend mit einem Auswahlbildschirm zu einer App zusammengefasst werden sollen.
Nun geht es mir eben darum, wie man das am sinnvollsten bewerkstelligt. Ich denke viele professionelle Apps werden wohl von mehreren Menschen parallel entwickelt, also müsste es da doch Mechanismen geben... Das mit den libraries ist schon mal ein guter Hinweis. Werd ich mich mit befassen.
 
Dann am besten mal Git oder GitHub ansehen. Kenne mich damit selber nicht aus, ist aber das, was ihr braucht.
 
  • Danke
Reaktionen: Der Nat

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
1.045
Robby1950
R
H
Antworten
2
Aufrufe
1.316
Hcman
H
Zurück
Oben Unten