# Android Studio alternativen? Ich verzweifle...



## CT9288 (24. Sep 2019)

Hallöchen allerseits. Ich habe vor kurzem in Netbeans meine erste funktionierende App fertiggestellt, und wollte diese nun für Android geräte verfügbar machen, und was soll ich sagen, der Umstieg auf Android Studio bricht mir das Genick. Entweder ich bin zu blind, um die Lösungen zu finden, oder...ich weiß auch nicht. Hat hier jemand eine funktionierende Alternative zu AS, mit dem man Apps für Android erstellen kann?
Oder vielleicht eine Antwort auf folgende Fragen, die mich an den Rand der Verzweiflung führen:

Warum nimmt AS nur *.png formate an? Muss ich jetzt alle meine *.jpg dateien umwandeln? Ich weiß, die Bilder kommen in den drawable bereich, aber darin erkennt er nur *.png, und dann nicht mal, wenn sie im "anydpi" ordner sind, muss ich jetzt jedes einzelne Bild für jede verfügbare Displaygröße zurechtschustern? Das ist einfach ungeheuerlich...

Kann ich innerhalb der Activities denn nicht auf Buttons zugreifen? In der class datei sind zumindest keine Buttons zu sehen, sonst hätte ich das über java selbst versucht zu regeln, aber ich finde die Buttonreferenzen nicht, wo stehen die? Gibt es die? 

Ich finde es schade, dass Android die Kooperation mit NetBeans und Eclipse eingestellt haben...ich komme da einfach nicht rein -.-
Wenn NetBeans mit dem Erwerb des PKW führerscheins vergleichbar war, ist AS der Panzerführerschein...

Ich danke schonmal im Voraus in meiner verzweiflung...


----------



## kneitzel (24. Sep 2019)

Kannst du denn einmal schreiben, was du genau versuchst? Wie hast Du die jpg Bilder hinzugefügt? An welcher Stelle versuchst Du wie darauf zuzugreifen?
Android kann problemlos mit jpg Dateien umgehen so die schlechtere Qualität durch die Verlustreiche Kompression für Dich ausreichend ist. (Der Grund, wieso ich immer zu PNG raten würde, aber das ist ja erst einmal unabhängig von Deinem Problem)

Und natürlich lässt sich auch eclipse verwenden. Siehe z.B. https://greenitsolutions.at/android-eclipse-sdk-adt-turorial-deutsch/ - aber ich fürchte, dass Du irgend einen generelles Problem hast, das eben nicht unbedingt IDE bezogen sein dürfte. Build wird ja auch meistens per Gradle ausgeführt, was ja auch anzeigt, dass es eben relativ unabhängig von der IDE ist.... (Aber Google baut da ein Bundle um dann darüber z.B. das SDK zu verwalten, aber es spricht nichts dagegen, es nicht für mehr zu verwenden als für die Verwaltung des SDKs.


----------



## CT9288 (27. Sep 2019)

So, erstmal danke für deine Antwort. Nachdem ich eine Nacht drüber geschlafen habe und meine Frustration soweit mindern konnte um wieder neu an die Sache herangehen zu können, habe ich einige der Probleme, einschließlich das mit den Bildern, selbst regeln können. Nun kam aber direkt das nächste Problem. Ich hab es bereits gegoogelt, aber andere leidensgenossen scheinen da ein viel komplexeres Problem zu haben als ich.

Das ist mein Fehler:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.manticore.maeh/com.manticore.maeh.DiverseActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

und das ist das Bischen Java das ich überhaupt nur habe:


```
package com.manticore.maeh;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void DiverseActivity(View v){

        Intent i = new Intent(this, DiverseActivity.class);
        startActivity(i);

    }
}
```


```
package com.manticore.maeh;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;

public class DiverseActivity extends AppCompatActivity {

    ImageView ImgDivA = findViewById(R.id.imageDivA);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_diverse);

        ImgDivA.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                ImgDivA.setImageResource(R.drawable.grapes);
            }
        });
    }

}
```

Was könnte ich hier nun wieder falsch gemacht haben?


----------



## CT9288 (27. Sep 2019)

Verzeihung, ich war auf der Arbeit und musste schnell machen. Mein Problem war, dass ich eine MainActivity erstellt habe, hatte mir die auch schön eingerichtet und designt, danach wollte ich einen ImageButton der MainActivity auf die DiverseActivity verlinken. Das ging auch ohne Probleme. Aber seitdem ich ein ImageButton der DiverseActivity mit einer Funktion belegen wollte, die selbigem ImageButton ein Bild im *.jpg Format zuordnen sollte, stürzte die App immer wieder ab. Der Debugger hat mir den oben genannten Fehler ausgespuckt (und noch mehr, aber schreibt mir bitte, wenn ich das auch noch posten soll).

Und nun habe ich den Fehler auch, wenn ich den Teil mit dem *.jpg ausblende. Jedesmal, wenn die DiverseActivity aufgerufen wird, stürzt es ab. Was kann das sein?
Ich habe mit Android Studio nur wenig Erfahrung, daher diese extreme Unwissenheit ^^"


----------



## CT9288 (28. Sep 2019)

So. erledigt. Für alle, die ein ähnliches Problem haben sollten:
wenn ihr ein ImageView in Android Studio clickbar machen wollt, benutzt die androidnClick option im xml editor. Das funktioniert einwandfrei =)


----------



## mihe7 (28. Sep 2019)

Mit der IDE (Android Studio) hat das alles nichts zu tun. Du kannst findViewById nicht schon während der Initialisierung des Activity-Objekts verwenden. Ruf `ImgDivA = findViewById(R.id.imageDivA);` nach `setContentView(R.layout.activity_diverse);` auf, dann sollte der Spaß funktionieren. 

Bitte halte Dich an die Namenskonventionen von Java: Namen von Variablen, Parameter und Methoden in lowerCamelCase. Die Variable sollte imgDivA und nicht ImgDivA heißen.


----------



## CT9288 (28. Sep 2019)

Danke für den Hinweis, leider ist dies das erste mal, dass ich mit findViewById gearbeitet habe, diese funktion kannte ich aus netbeans noch nicht.
Und paradoxer weise hab ich in netbeans meine Variablen immer soGeschrieBen, warum ichs hier anders mache, keine idee, aber ich werds wieder ändern


----------



## mihe7 (28. Sep 2019)

CT9288 hat gesagt.:


> diese funktion kannte ich aus netbeans noch nicht.


Du scheinst ein kleines Verständnisproblem zu haben. NetBeans und Android Studio sind einfach "bessere Java Editoren", die bringen selbst keine "Befehle" mit. 

findViewById ist einfach eine Methode der Klasse Activity, die von der Android-Standardbibliothek zur Verfügung gestellt wird.

Unter Android ist vieles anders wie auf dem Desktop, mit vielen Stolpersteinen, auch wenn die gleiche Sprache verwendet wird. Äußerst wichtig im Zusammenhang mit Activities ist ein Verständnis für den Lifecycle (https://developer.android.com/guide/components/activities/activity-lifecycle). 

Während Du z. B. in Swing selbst Deine JFrame erzeugst, verwaltest und zerstörst, erfolgt dies unter Android durch die Plattform selbst. Unter Android teilst Du lediglich mit: "Liebes Android, zeig mir doch bitte, bitte die Activity xyz an". Wenn Android gnädig ist, tut es das auch, was aber nicht bedeutet, dass Du Dich darauf verlassen kannst, dass Dir die Activity beliebig zur Verfügung steht. Drehst Du z. B. das Gerät, zerstört Android Deine Activity und erstellt eine neue. Das aber nur nebenbei.

Wenn Android eine Activity erzeugt, verbindet es diese mit verschiedenen Dingen (dem Context, einem Fenster etc.) und ruft auch onCreate auf. Dort legst Du fest, was angezeigt werden soll (setContentView) und erst nachdem das klar ist, macht es überhaupt Sinn, Elemente zu suchen (findViewById).


----------

