Android Snake

Java xyrse123

Bekanntes Mitglied
Hallo,
ich habe eine kleine Snake App gemacht. Vielleicht kann mir ja jemand ein Feedback geben.
Die Schlange lässt sich über 4 Buttons steuern und muss zufällig verteilte Äpfel einsammeln. Wenn sie den Rand berührt oder sich selbst beisst, kommt der Gameover Screen und man kann ein neues Spiel starten. Die Punkte werden gezählt und die Highscores gespeichert.
Im Anhang sind zwei Bilder von dem Spiel.

Java:
public class MainActivity extends AppCompatActivity {

    private static Button hoch;
    private static Button rechts;
    private static Button unten;
    private static Button links;
    private Schlange schlange;
    private TextView PunkteText;
    private static TextView PunkteTextView;
    private static MediaPlayer mp = new MediaPlayer();
    private static TextView HighscoreText;
    private static TextView HighscoreTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hoch = (Button) findViewById(R.id.button1);
        rechts = (Button) findViewById(R.id.button2);
        unten = (Button) findViewById(R.id.button3);
        links = (Button) findViewById(R.id.button4);
        PunkteText = (TextView) findViewById(R.id.textView1);
        PunkteTextView = (TextView) findViewById(R.id.textView2);
        HighscoreText = (TextView) findViewById(R.id.textView3);
        HighscoreTextView = (TextView) findViewById(R.id.textView4);

        schlange = new Schlange(this);                                                       
        RelativeLayout.LayoutParams params = new           RelativeLayout.LayoutParams(900, 900);
        schlange.setLayoutParams(params);
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout1);
        schlange.setBackgroundColor(Color.YELLOW);
        layout.addView(schlange);

        try {
            mp.setDataSource( this,Uri.parse("android.resource://com.example.admin.snake/raw/hintergrund"));
            mp.prepare();
        } catch (Exception e) {e.printStackTrace();}
        mp.start();
        mp.setLooping(true);
    }

    public  static Button  getHoch() { return hoch; }
    public static Button getRechts() { return rechts;}
    public static Button getUnten() { return unten; }
    public static Button getLinks() { return links; }
    public static TextView getPunkteTextView() { return PunkteTextView;}
    public static MediaPlayer getMediaPlayer(){ return mp;}
    public static TextView getHighscoreTextView(){return HighscoreTextView;}
}

Java:
public class Schlange extends SurfaceView implements View.OnClickListener,SurfaceHolder.Callback {

    private int maxLänge =1000;
    private int aktLängeSchlange = 1;

    private Richtung richtung;
    private int KoordX[] = new int[maxLänge];
    private int KoordY[] = new int[maxLänge];

    private Button hoch = MainActivity.getHoch();
    private Button rechts = MainActivity.getRechts();
    private Button unten = MainActivity.getUnten();
    private Button links = MainActivity.getLinks();

    private int breite = 30;
    private int höhe = 30;
    private int Feld[][] = new int[breite][höhe];
    private static int Punkte = 0;

    private MainActivity activity = new MainActivity();
    private Timer timer = new Timer();
    private int FutterX, FutterY;
    private TextView PunkteTextView = MainActivity.getPunkteTextView();
    private MediaPlayer mp = new MediaPlayer();
    private TextView HighscoreTextView = MainActivity.getHighscoreTextView();

    public Schlange(Context context) {
        super(context);
        hoch.setOnClickListener(this);
        rechts.setOnClickListener(this);
        links.setOnClickListener(this);
        unten.setOnClickListener(this);
        StartPunktSchlange();
        zufälligerApfel();
        PunkteTextView.setText("0");
        HighscoreTextView.setText(""+HighscoreLaden());
        timer.schedule(new BewegungSchlange(), 0,125);
    }

class BewegungSchlange extends TimerTask {

    public void run() {
        activity.runOnUiThread(new TimerTask() {

            public void run() {
                for (int i = aktLängeSchlange; i > 0; i--) {
                    KoordX[I] = KoordX[i-1];
                    KoordY[I] = KoordY[i-1];
                }

                RichtungÄndern();
                essen();
                invalidate();
            }
         });
    }
}

public void StartPunktSchlange() {
        KoordX[0] = (int)(Math.random()*(breite-2))+1;
        KoordY[0] = (int)(Math.random()*(höhe-2))+1;
}

 
public enum Richtung {
Hoch, Unten, Rechts, Links;
}
 
public void RichtungÄndern() {
if(richtung!=null) {
    switch (richtung) {
        case Hoch:
            KoordY[0] = KoordY[0] - 1;
            break;
        case Unten:
            KoordY[0] = KoordY[0] + 1;
            break;
        case Rechts:
            KoordX[0] = KoordX[0] + 1;
            break;
        case Links:
            KoordX[0] = KoordX[0] - 1;
            break;
    }
  }
}

public static int getPunkte() {
        return Punkte;
}

public static void setPunkte() {
        Punkte=0;
}

    public void essen() {
        if(KoordX[0]==FutterX && KoordY[0]==FutterY) {
            try {
                mp.setDataSource( getContext(), Uri.parse("android.resource://com.example.admin.snake/raw/apfel"));
                mp.prepare();
            } catch (Exception e) {e.printStackTrace();}
            mp.start();

            try {
                mp.setDataSource(getContext(), Uri.parse("android.resource://com.example.admin.snake/raw/hintergrund"));
            mp.setLooping(true);
            } catch(Exception ex) {ex.printStackTrace();}

            aktLängeSchlange= aktLängeSchlange+1;
            Punkte = Punkte +1;
            zufälligerApfel();
            PunkteTextView.setText(""+Punkte);
            invalidate();
        }
    }

    public void HighscoreSchreiben() {
        SharedPreferences pref = getContext().getSharedPreferences("GAME",0);
        SharedPreferences.Editor editor = pref.edit();
        editor.putInt("HIGHSCORE", Punkte);
        editor.commit();
    }

    public  int HighscoreLaden() {
        SharedPreferences pref = getContext().getSharedPreferences("GAME",0);
        return pref.getInt("HIGHSCORE",0);
    }

    public void zufälligerApfel() {
        FutterX = (int) (Math.random()*(breite-2));
        FutterY = (int) (Math.random()*(höhe-2));
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.button1:
                richtung = Richtung.Hoch;
                break;
            case R.id.button2:
                richtung = Richtung.Rechts;
                break;
            case R.id.button3:
                richtung = Richtung.Unten;
                break;
            case R.id.button4:
                richtung = Richtung.Links;
                break;
        }
    }

    public boolean GameOver() {

        for(int i=1; i<aktLängeSchlange; i++) {
            if(KoordX[0]==KoordX[I] && KoordY[0] == KoordY[I]) {
                timer.cancel();
                return true;
            }
        }
        if(KoordX[0]<0 || KoordX[0]>29 || KoordY[0]<0 ||KoordY[0]>29 ) {

            timer.cancel();
            return true;
        }
        return false;
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}

    @Override
    public void surfaceCreated(SurfaceHolder holder) {}

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {}

    @Override
    public void onDraw(Canvas canvas) {

        super.onDraw(canvas);
        Paint p = new Paint();

        p.setColor(Color.GREEN);
        canvas.drawRect(FutterX*30, FutterY*30,FutterX*30+30,FutterY*30+30,p );

        p.setColor(Color.RED);
        canvas.drawRect(KoordX[0]*30, KoordY[0]*30, KoordX[0]*30+30, KoordY[0]*30+30,p); // Kopf
        p.setColor(Color.BLUE);

        for(int i=1; i<aktLängeSchlange; i++) { // Rumpf
            canvas.drawRect(KoordX[I]*30, KoordY[I]*30, KoordX[I]*30+30, KoordY[I]*30+30,p);
        }

        if(GameOver()==true) {

            if(Punkte>HighscoreLaden()) {
                HighscoreSchreiben();
              }

              Intent intent = new Intent(getContext(), GameOverScreen.class);
              getContext().startActivity(intent);
        }
    }
}

Java:
public class GameOverScreen extends AppCompatActivity implements View.OnTouchListener{

    private ZeichenView zw ;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
        zw = new ZeichenView(this);
        layout.setOnTouchListener(this);
        layout.addView(zw);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int aktion = event.getAction();

        if(aktion==MotionEvent.ACTION_DOWN) {
            Intent intent = new Intent(this, MainActivity.class);
           this.startActivity(intent);
       return true;
        }

        return false;
    }

class ZeichenView extends View {

        ZeichenView(Context context) {
            super(context);
        }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint p = new Paint();
        p.setColor(Color.BLACK);
        p.setTextSize(200);
        canvas.drawText("Game Over",50,400,p);
        p.setTextSize(75);
        canvas.drawText("Deine Punkte:"+Schlange.getPunkte(),300,600,p);
        Schlange.setPunkte();
        }
   }
}
Schonmal Danke im vorraus.
 

Anhänge

  • Spiel.png
    Spiel.png
    50,6 KB · Aufrufe: 154
  • GameOver.png
    GameOver.png
    36,6 KB · Aufrufe: 151
Zuletzt bearbeitet:

Robat

Top Contributor
Moin, hier mal ein paar Anmerkungen von mir.

(1)
Deine Attribute und deren Getter sollten nicht static sein und müssen es auch nicht. Wenn du in der MainActivity ein neues Schlangen-Objekt erstellst kannst du die Instanz deiner MainAcitivty übergeben und darüber die Getter der Attribute aufrufen. Das gleiche gilt für deine GameOver-Anzeige.
Java:
public class MainActivity extends AppCompatActivity {
    private Schlange schlange;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        this.schlange = new Schlange(this);
        this.button = (Button) ... ;
    }
    public Button getSomButton() { return button; }
}

public class Schlange extends SurfaceView implements View.OnClickListener,SurfaceHolder.Callback
    private MainActivity mainActivity;
    public Schlange(final Context context) {
        super(context);
        this.mainAcitivty = (MainAcitivty) context;
        this.mainAcitivty.getSomeButton();
    }
    ....
}

(2) Achte auf die "korrekte" Schreibweise deiner Variablen - und Methodennamen. Du wechselst immer zwischen UpperCammelCase und lowerCammelCase. Laut Konvention sollten Variablen - und Methodennamen immer in lowerCamelCase geschrieben werden. Wichtig ist das du ein Style durch dein Projekt durchziehst und nicht wechselst - das macht es schwerer deinen Code zu lesen.

(3) Stichwort Semantik und SRP. Klassen und deren Methoden sollten nur das machen was ihr Name auch preisgibt. Deine Klasse Schlange ist momentan für 3 Dinge zuständig:
- Schlangen anzeigen, Schlangen Model aktualisieren (X - und Y Koordinaten, Länge, ..) und dessen Logik verwalten
- Spielfeld anzeigen, Spielfeld Model aktualisieren (Spielbrett, .. ) und dessen Logik verwalten
- Die Logik für den Ablauf des gesamten Spiels verwalten
Jede Klasse sollte nach dem SRP aufgebaut sein und das sollte man während des Programmierens immer mal testen. Schlange sollte von der Semantik her das Model sein - also die Koordinaten und die Länge der Schlange verwalten und Methoden anbieten um diese zu verändern. Das Zeichnen der Schlange sollte in einer anderen Klasse geschehen die deine View zeichnet (inkl. Spielfeld). Vielleicht schaust du da selber noch mal drüber und versuchst selbständig eine Struktur zu finden wo jede Klasse nur für ein was zuständig ist.

(4) Zusätzlich zu 3. In deiner onDraw(Canvas canvas) Methode machst du gerade die Prüfung ob ein Spiel GameOver ist. Das gehört mEn nicht in die draw-Methode sondern in die Spiellogik.

(5)
Java:
if(GameOver()==true)
kannst du auch einfach so schreiben
Java:
if(GameOver())

Die Zahl 30, was augenscheinlich die Höhe/Breite eines Schlangenteils ist, würde ich in eine Konstante auslagern. Wenn du das mal auf 35 ändern willst musst du an so vielen Stellen Anpassungen vornehmen .. da kann schnell mal was vergessen werden.
 

Java xyrse123

Bekanntes Mitglied
Danke für deine ausführliche Antwort. Ich werde noch probieren die ganzen Verbesserungsvorschläge umzusetzen.
Ich habe gestern ganz vergessen die layout Datei hochzuladen. Vielleicht kannst du da ja nochmal draufschauen und mir Verbesserungsvorschläge geben.
Java:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@android:color/holo_blue_light"
    tools:context=".MainActivity">


    <RelativeLayout
        android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        
        <Button
            android:id="@+id/button1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="93dp"
            android:text="H" />

        <Button
            android:id="@+id/button2"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignTop="@+id/button4"
            android:layout_toEndOf="@+id/button1"
            android:text="R" />

        <Button
            android:id="@+id/button3"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="U" />

        <Button
            android:id="@+id/button4"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="43dp"
            android:layout_toStartOf="@+id/button1"
            android:text="L" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="50dp"
            android:layout_height="25dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:layout_marginBottom="144dp"
            android:layout_marginStart="20dp"
            android:text="Punkte:"
            android:textSize="13dp" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignTop="@+id/textView1"
            android:layout_toEndOf="@+id/textView1"
            android:textSize="13dp"
            android:text="" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="75dp"
            android:layout_height="25dp"
            android:layout_alignBottom="@+id/textView1"
            android:layout_alignParentEnd="true"
            android:layout_marginEnd="82dp"
            android:textSize="13dp"
            android:text="Highscore:" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignTop="@+id/textView1"
            android:layout_marginStart="-82dp"
            android:layout_toEndOf="@+id/textView3"
            android:textSize="13dp"
            android:text="" />

    </RelativeLayout>
</android.support.constraint.ConstraintLayout>
 

Java xyrse123

Bekanntes Mitglied
Ich habe jetzt versucht die static Methoden umzuändern wie du es geschrieben hast, aber ich bekomme immer eine NullpointerException, wenn ich dem Button eine OnClickListener hinzufüge.
 

Java xyrse123

Bekanntes Mitglied
So wie du es geschrieben hast:
Java:
private MainActivity activity ;
private Button hoch;

public Schlange(Context context) {
    super(context);
    this.activity = (MainActivity) context;
    this.activity.getHoch(); 
    hoch.setOnClickListener(this);
}
 

Java xyrse123

Bekanntes Mitglied
Ich habe jetzt versucht es in mehr Dateien aufzuteilen. Ein Schlangenteil wird auch auf das Canvas gemalt, aber die Koordinaten der Schlange(die eigentlich in dem Timer immer verändert werden müssten) verändern sich nicht. Das SchlangenModel soll wie du geschrieben hast, die Koordinaten speichern und die Bewegung usw. zuständig sein und auf der SchlangenView soll dann gezeichnet werden.

Java:
public class SchlangeModel {

   private  int aktLängeSchlange = 1;
   private  final int maxlänge = 1000;
   private  int[] koordX = new int[maxlänge];
   private int[] koordY = new int[maxlänge];


   public SchlangeModel(Context context) { 
       startPunktSchlange();
   }

    public void startPunktSchlange() {
        koordX[0] = (int)(Math.random()*(28)+1);
        koordY[0] = (int)(Math.random()*(28)+1);
   }

    public void bewegeSchlange() {
                for (int i = aktLängeSchlange; i > 0; i--) {
                                koordX[i] = koordX[i - 1];
                                koordY[i] = koordY[i - 1];                       
                            }                
                        }

...
    public int getAktLängeSchlange() {
       return aktLängeSchlange;
    }

    public int[] getKoordX() {
       return koordX;
    }

    public  int[] getKoordY() {
       return koordY;
    }
}

Java:
public class SchlangeView extends SurfaceView implements SurfaceHolder.Callback{

    private int aktLängeSchlange;
    private int[] koordX = new int[1000];
    private int[] koordY = new int[1000];
    private Timer timer = new Timer();
    private TimerTask timerTask;

    private SchlangeModel schlangeModel;
    private MainActivity mainActivity;

    public SchlangeView(Context context) {
     super(context);
     mainActivity = (MainActivity) context;
     schlangeModel = new SchlangeModel(context);
     animiere();
    }


    public void animiere() {
 
        timerTask = new TimerTask() {

            @Override
            public void run() {       
                mainActivity.runOnUiThread(new TimerTask() {

                    @Override
                    public void run() {              
                 
                        aktLängeSchlange = schlangeModel.getAktLängeSchlange();
                        koordX = schlangeModel.getKoordX();
                        koordY = schlangeModel.getKoordY(); // Hier verändern sich die Koordinaten nicht
                        schlangeModel.bewegeSchlange();              
                        invalidate();               
                    }
                });
            }
        };timer.schedule(timerTask, 100, 150);
    }
}
 
Zuletzt bearbeitet:

Robat

Top Contributor
Hab es jetzt mal kurz überflogen. Die Aufteilung ist okay.
Wenn ich dir noch ein Tipp geben darf: Entscheide dich für eine Sprache hinsichtlich der Namensgebung. Entweder deutsch oder Englisch. :)
 

Java xyrse123

Bekanntes Mitglied
Hallo,
eine Frage hätte ich noch. Für die Punkte habe ich jetzt eine Singleton Klasse gemacht, da es davon nur ein Exemplar geben soll und ich gerade etwas über Entwurfsmuster gelesen habe. Ist das so eine "gute" Vorgehensweise? Und würde es Sinn machen, so etwas auch für das SchlangenModel zumachen?
Java:
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class Points {

    private final static Points Instance = new Points();
    private int currentPoints =0;
    private int highscore =0;

    public final static Points getInstance() {
        return Instance;
    }

    private Points() {}

    private void writeHighscore() {
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.getContext());
        SharedPreferences.Editor editor = pref.edit();
        editor.putInt("HIGHSCORE", highscore);
        editor.commit();
    }

    private int loadHighscore() {
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.getContext());
        return pref.getInt("HIGHSCORE",0);
    }


    private int getCurrentPoints() {
        return this.currentPoints;
    }

    private void setCurrentPoints(int currentPoints) {
        this.currentPoints = currentPoints;
    }

    private void setHighscore() {
        if(this.currentPoints > loadHighscore()) {
            this.highscore = this.currentPoints;
            writeHighscore();
        }
    }
}
 

Joah

Mitglied
Also du wolltest ja ein Feedback, deshalb hier bitte schön:
Du programmierst hier ja ein Mini-Spiel. Zum Programmieren lernen bestimmt nicht schlecht.

Wenn du aber einmal komplexere und professionelle Spiele entwickeln willst, hier ein paar Tipps:
Bei Spielen mit Bewegung ist es in der Regel so, dass OpenGL verwendet wird. Dadurch wird die Welt von der Grafikkarte gezeichnet. Dazu gibt es die Klasse GLSurfaceView.

Bei der Klasse Canvas wird ein Bitmap im Hauptspeicher gehalten und ich vermute die draw-Befehle laufen auf dem Hauptprozessor. Das ist eher zum zeichnen für Diagramme geeignet.

Man benötigt also OpenGL und das ist verdammt kompliziert. Würde man das jetzt alles lernen wollen, würde man wahrscheinlich nur mit OpenGL zu tun haben und gar nicht zum Spiele entwickeln kommen.

Deshalb gibt es Frameworks, die speziell zum Entwickeln von Spielen gemacht sind und damit werden auch die großen Spiele gemacht.

Es gibt z. B. Unity. Damit wurde u. a. Temple Run und Angry Birds 2 gemacht (Quelle).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Benachrichtigung Freigabe ab Android 14 Android & Cross-Platform Mobile Apps 1
J Android Benachrichtigung zum Zeitpunkt ers Android & Cross-Platform Mobile Apps 15
J Das Beispiel von Android erzeugt Fehler Android & Cross-Platform Mobile Apps 8
J Zeitdifferenzen unter Android 7 (API < 26) berechnen Android & Cross-Platform Mobile Apps 4
W Netzwerk Verbindungen Java Android Android & Cross-Platform Mobile Apps 107
Z Android IntelliJ Android & Cross-Platform Mobile Apps 2
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
Android App auf das eigene Handy bekommen Android & Cross-Platform Mobile Apps 3
Alex IV Android App erstellen Android & Cross-Platform Mobile Apps 3
OnDemand CrossPlatform Kotlin iOs/Android Datenverbrauch Android & Cross-Platform Mobile Apps 2
W In Android Studio Integer an andere activities übergeben Android & Cross-Platform Mobile Apps 2
wladp Android Studio Room Database Android & Cross-Platform Mobile Apps 1
N "Schöne" Datatable in Android und setzen von Parametern von Textview im Code Android & Cross-Platform Mobile Apps 5
N Android game programmieren Android & Cross-Platform Mobile Apps 5
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
K BLE Komunikation mit Android studio und esp32 Android & Cross-Platform Mobile Apps 5
G Android UDP Kommunikation Android & Cross-Platform Mobile Apps 1
M Paper DB wird in Android Studio nicht erkannt Android & Cross-Platform Mobile Apps 7
J Android zugrif auf Thread nach Handy drehen. Android & Cross-Platform Mobile Apps 10
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
K Android Android In-App-Purchase lädt nicht Android & Cross-Platform Mobile Apps 0
Besset Android http request an interne ip adresse funktioniert nicht Android & Cross-Platform Mobile Apps 8
J Is Android Development Head First Outdated? Android & Cross-Platform Mobile Apps 3
J Android Android Datenbankverbindung zum Raspberry Pi Android & Cross-Platform Mobile Apps 1
lolcore Android Studio -Download Documentation for Android SDK Android & Cross-Platform Mobile Apps 0
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
W Problem mit Android Studio Android & Cross-Platform Mobile Apps 0
W App Abo Android Android & Cross-Platform Mobile Apps 10
OSchriever Android Android MediaPlayer bei Anruf stoppen/pausieren Android & Cross-Platform Mobile Apps 2
OSchriever Auf onClick-Listener reagieren und Parameter übergeben (Android Studio) Android & Cross-Platform Mobile Apps 4
W removeNetwork Android App mit Spendenaktion fürs Tierheim! Android & Cross-Platform Mobile Apps 1
T Android R.string.test+i Problem Android & Cross-Platform Mobile Apps 2
P undefinierbarer Fehler Android Android & Cross-Platform Mobile Apps 8
T Android ArrayList sortieren mit 2 Werten ohne thencomparing , Wie? Android & Cross-Platform Mobile Apps 10
W Variable überschreiben (Android Studio) Android & Cross-Platform Mobile Apps 2
ruutaiokwu Android Selbst entwickelter SMTP-Client läuft auf PC, nicht aber auf Android Android & Cross-Platform Mobile Apps 9
ruutaiokwu Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
ruutaiokwu Android Wo das 'android.useAndroidX' property hinzufügen? Android & Cross-Platform Mobile Apps 8
ruutaiokwu Android In einem Android-“Spinner”-Element GLEICHZEITIG Bild (links) UND Text (rechts) anzeigen Android & Cross-Platform Mobile Apps 0
P Login und Registrierung Android Anzeige Android & Cross-Platform Mobile Apps 7
S Von JavaFx zu Android Android & Cross-Platform Mobile Apps 12
K Android to Pi | Websocket Problem Android & Cross-Platform Mobile Apps 3
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Komponenten positionieren in Android Studio 3.6.3 Android & Cross-Platform Mobile Apps 1
M Android Studio - Property-Fenster einblenden Android & Cross-Platform Mobile Apps 1
M Android Studio - App auf dem Smartphone testen Android & Cross-Platform Mobile Apps 7
M Barrierefreie Appentwicklung für Android - Suche Codebeispiele Android & Cross-Platform Mobile Apps 8
M Android Studio - Configuration fehlt Android & Cross-Platform Mobile Apps 20
M Wo kann ich das Android SDK herunterladen / wie kann ich es installieren Android & Cross-Platform Mobile Apps 3
M Unsupported class file major version 57 - Fehlermeldung bei Android Studio Android & Cross-Platform Mobile Apps 27
ruutaiokwu Android Studio (SDK) ANDROID_SDK_ROOT-Variable? Android & Cross-Platform Mobile Apps 5
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
J Android Studio macht seltsame Sachen Android & Cross-Platform Mobile Apps 2
J Android 9.1 aber android Studio findet API22 Android & Cross-Platform Mobile Apps 0
Dimax Web-Seite in native app convertieren mit Android Studio Android & Cross-Platform Mobile Apps 8
A Android Studio: while-Schleife beginnt nicht Android & Cross-Platform Mobile Apps 5
lolcore android studio: fehler bei laden des emulators Android & Cross-Platform Mobile Apps 10
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
J Android Studio - ArrayList - Selected Item ermitteln Android & Cross-Platform Mobile Apps 13
T Android SDK-Manager startet nicht in Eclipse Android & Cross-Platform Mobile Apps 5
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
J Was soll das bedeuten ? does not require android.permission.BIND_JOB_SERVICE permission Android & Cross-Platform Mobile Apps 7
A Android Studio: ImageView verpixelt Android & Cross-Platform Mobile Apps 2
J intend Service im Android Studio Android & Cross-Platform Mobile Apps 4
L Android Android Development eventuell mit Flutter Android & Cross-Platform Mobile Apps 1
S Android Layout - welchen Typ? Android & Cross-Platform Mobile Apps 3
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
L Android Android Contacts DB auslesen Android & Cross-Platform Mobile Apps 1
A Android Studio - App mit Nearby Android & Cross-Platform Mobile Apps 1
L Android content URI Datei einlesen Android & Cross-Platform Mobile Apps 9
N Android Game Background Service Android & Cross-Platform Mobile Apps 11
Jackii Android Android Studio Error im Testlauf ohne zu programmieren Android & Cross-Platform Mobile Apps 9
B Android Probleme mit Android Studio Android & Cross-Platform Mobile Apps 6
Excess Android Service läuft nicht in Sandby weiter Android & Cross-Platform Mobile Apps 2
B Android Projekt für Android und IOS erstellen? Android & Cross-Platform Mobile Apps 5
J App funktioniert auf Android 5, auf 6 nicht Android & Cross-Platform Mobile Apps 2
J Android TaschenRechner Android & Cross-Platform Mobile Apps 22
I Das Problem mit der Tastatur... android:windowSoftInputMode="adjustPan" Android & Cross-Platform Mobile Apps 1
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
B Android Kein Zugriff auf Telefonspeicher (Android 6) Android & Cross-Platform Mobile Apps 1
T Android Equalizer für Android Android & Cross-Platform Mobile Apps 3
L Android Android Studio - Exportierte APK funktioniert nicht Android & Cross-Platform Mobile Apps 6
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
A Beginnen mit Serverkommunikatsion in Android Studio Android & Cross-Platform Mobile Apps 6
E Android Studio Android & Cross-Platform Mobile Apps 15
L Android Android Studio Setup killt Explorer Android & Cross-Platform Mobile Apps 3
K Android Videos rendern Android & Cross-Platform Mobile Apps 1
J Variable in strings.xml (Android Studio) Android & Cross-Platform Mobile Apps 0
B Android Android Studio lässt PC abstürzen Android & Cross-Platform Mobile Apps 3
B Android App Fehler Android & Cross-Platform Mobile Apps 21
J android Spinner funktioniert nicht Android & Cross-Platform Mobile Apps 14
G Android Push Notification Android & Cross-Platform Mobile Apps 2
Light Lux Fehlermeldung unter Android Studio Android & Cross-Platform Mobile Apps 1
D Android Android Apps direkt vom Handy aus programmieren? Android & Cross-Platform Mobile Apps 2
L Android Android Kalendar Tag Ansicht Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben