Android java.lang.IllegalStateException: No host

Nemo2478

Aktives Mitglied
Folgendes Szenario: Ich habe ein TabLayout mit 2 Registerkarten. Auf der einen Registerkarte befindet sich ein Button. Wenn ich diesen Button drücke, stellt die App eine Verbindung zu einem Chat-Server her und wechselt automatisch zur zweiten Registerkarte. Das Problem ist, dass die App abstürzt, wenn ich zur ersten Registerkarte zurückkehre (während die Verbindung zum Server noch besteht). Wenn ich zwischen den Registerkarten wechsle (solange keine Verbindung zum Server hergestellt wurde), ist alles normal und die App stürzt überhaupt nicht ab.

Der vollständige Fehler (der wichtigste Teil habe ich hervorgehoben) lautet:
12-21 15:04:19.693 11342 11342 E AndroidRuntime FATAL EXCEPTION: main
12-21 15:04:19.693 11342 11342 E AndroidRuntime Process: com.mycompany.myapp, PID: 11342
12-21 15:04:19.693 11342 11342 E AndroidRuntime java.lang.IllegalStateException: No host
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1235)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2042)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1976)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.os.Handler.handleCallback(Handler.java:790)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.os.Looper.loop(Looper.java:165)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:6774)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at java.lang.reflect.Method.invoke(Native Method)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:477)
12-21 15:04:19.693 11342 11342 E AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)

Hier der Code von MainActivity.java (wurde gekürzt):
Java:
public class MainActivity extends AppCompatActivity
{
    FrameLayout simpleFrameLayout;
    TabLayout tabLayout;
    SecondFragment s = new SecondFragment();
   
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
        simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
// Create a new Tab named "First"
        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("First"); // set the Text for the first Tab
   
// first tab
        tabLayout.addTab(firstTab); // add  the tab at in the TabLayout
// Create a new Tab named "Second"
        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Second"); // set the Text for the second Tab
       
        tabLayout.addTab(secondTab); // add  the tab  in the TabLayout

        Fragment fragment = null;
        fragment = new FirstFragment();
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.simpleFrameLayout, fragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();
       
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
// get the current selected tab's position and replace the fragment accordingly
                    Fragment fragment = null;
                    switch (tab.getPosition()) {
                        case 0:
                            fragment = new FirstFragment();
                            myMenu.findItem(R.id.telefono).setVisible(false);
                            break;
                        case 1:
                            fragment = s;
                            myMenu.findItem(R.id.telefono).setVisible(true);
                            break;
                    }
                    FragmentManager fm = getSupportFragmentManager();
                    FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.simpleFrameLayout, fragment);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.commit();
                }
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {

                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {

                }
            });
    }
   
   
   
    public void connect(String nombre, String ip, int puerto) { //Diese Methode wird aufgerufen, wenn der Button aus Tab 1 getätigt wird
        //Code...
        Executor executor = Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {
                @Override
                public void run() {
                    Looper.prepare();
                   
                    try{
                        //Code...
                        try {
                            //Code...
                            try {
                                runOnUiThread(new Runnable() {

                                        @Override
                                        public void run() {
                                            TabLayout.Tab tab = tabLayout.getTabAt(1);
                                            tab.select();
                                        }
                                    });
                               
                            }
                            catch (Exception e){
                               
                            }
                           
                            //Code...
                        }
                        catch(SocketTimeoutException ex)
                        {

                        }
                    }
                    catch(Exception e){
                        StringWriter sw = new StringWriter();
                        e.printStackTrace(new PrintWriter(sw));
                        String stacktrace = sw.toString();
                        // create an email intent to send to yourself
                        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
                        emailIntent.setType("plain/text");
                        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "lets.think.android@gmail.com" });
                        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "App Error Report");
                        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, stacktrace);
                        // start the email activity - note you need to start it with a chooser
                        startActivity(Intent.createChooser(emailIntent, "Send error report..."));
                    }
                }
            });

    }
   
   
}

Wie ihr sehen könnt, wechselt die App bei der Methode 'connect' (die ausgeführt wird, wenn der Button von Tab 1 gedrückt wird) automatisch von Tab 1 zu Tab 2. Daher vermute ich, dass ein gewisser Status gemeldet werden muss. Zum Beispiel muss ich möglicherweise melden, dass Registerkarte 1 nicht mehr ausgewählt ist.

Hat jemand eine Idee, woran das Problem liegen könnte?


LG :)

Ach ja: ich habe versucht, dass die ganze Transaction nicht asynchronisch läuft, durch die Methode bei der ich euch vorhin gefragt habe, warum sie nicht zu FragmentTransaction gehöre (siehe mein letztes Thema). Aber es hat nichts gebracht :(
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Was zumindest als erstes auffälllt ist das sehr schlechte bis nicht existente ExceptionHandling, das würde ich als erstes mal beheben...

Dann wäre ein Stacktrace ganz hilfreich, und zusätzlich eine Angabe, wechlem Code die Frames jeweils entsprechen
 

Nemo2478

Aktives Mitglied
Was zumindest als erstes auffälllt ist das sehr schlechte bis nicht existente ExceptionHandling, das würde ich als erstes mal beheben...
Warum würdest das beheben bzw. was findest du diesbezüglich im Code schlecht? Dazu muss ich schreiben, dass diese App ziemlich am Anfang der Entwicklung steht. Nicht existente ExceptionHandling werden ja trotzdem im Logcat angezeigt...


Dann wäre ein Stacktrace ganz hilfreich
Die habe ich ja auch bereits mitgeteilt.


und zusätzlich eine Angabe, wechlem Code die Frames jeweils entsprechen
Was meinst du damit? Was meinst du mit "Frames"?


LG :)
 

mrBrown

Super-Moderator
Mitarbeiter
Warum würdest das beheben bzw. was findest du diesbezüglich im Code schlecht?
Deine Catch-Blöcke sind entweder leer (d.h. du bekommst den Fehler niemals zu Gesicht, er wird einfach versteckt), oder du versuchst den Stacktrace nur als Email zu senden (beim Entwickeln willst du das nicht, und in "Production" willst du (bzw der User) das auch nicht). In beiden Fällen sollte das mindestens geloggt werden. Wenn da was per Mail versendet werden soll, sollte das immer zusätzlich passieren.

Dazu muss ich schreiben, dass diese App ziemlich am Anfang der Entwicklung steht.
Das ist nur ne dumme Ausrede, grad zu Beginn will man möglichst viele Exceptions möglichst deutlich angezeigt bekommen. Mehr Arbeit als "das da" ist ein einfaches printStackTrace auch nicht – hilft im Gegensatz dazu aber.

Nicht existente ExceptionHandling werden ja trotzdem im Logcat angezeigt...
Die im Logcat angezeigte Exception flliegt außerhalb deines Codes. Wenn sie in einem deiner try-catch-Blöcke geflogen wäre, hättest du nicht mal bemerkt, dass es einen Fehler gab.


Die habe ich ja auch bereits mitgeteilt.
Stimmt, hab in der komischen Logcat ausgabe den Stacktrace übersehen :)

Was meinst du damit? Was meinst du mit "Frames"?
Die Zuordung zwischen deinem Code und der Klassen- und Zeilenangabe im Stacktrace.
 

Nemo2478

Aktives Mitglied
Deine Catch-Blöcke sind entweder leer (d.h. du bekommst den Fehler niemals zu Gesicht, er wird einfach versteckt),
Hast du dir mein Code überhaupt einmal angeschaut?!? Gehen wir Mal zusammen die 3 tries Mal durch:
Beim ersten try bekomme ich ein E-Mail-Entwurf mit dem Fehler (bereits passiert und bereits gelöst).
Beim zweiten try geht es um ein SocketTimeoutException (also im Grunde genommen, wenn keine Verbindung aufgebaut wurde). Das brauche ich noch nicht abzufangen, weil ich mich zunächst mit dem Wechseln-der-Tabs-Problematik befasse.
Beim dritten try geht es darum, dass ich eine Exception abfange, falls das automatische Wechseln vom ersten zum zweiten Tab nicht geklappt hat (was allerdings ohne Probleme funktioniert hat). Wofür also darüber ein Log zu schreiben?


oder du versuchst den Stacktrace nur als Email zu senden (beim Entwickeln willst du das nicht, und in "Production" willst du (bzw der User) das auch nicht). In beiden Fällen sollte das mindestens geloggt werden. Wenn da was per Mail versendet werden soll, sollte das immer zusätzlich passieren.
Ich habe es so eingerichtet, weil es am Anfang für mich praktisch war, dass ich den Fehler per E-Mail bekomme. Aber selbstverständlich, wenn die App fertig ist, möchte ich das weglassen...


Das ist nur ne dumme Ausrede, grad zu Beginn will man möglichst viele Exceptions möglichst deutlich angezeigt bekommen. Mehr Arbeit als "das da" ist ein einfaches printStackTrace auch nicht – hilft im Gegensatz dazu aber.
Da habe ich aber eine ganz andere Meinung!!!
Ich kenne viele Apps/Programme/Spiele, die ganz am Anfang, als sie noch nicht fertig waren aber trotzdem veröffentlicht wurden, ganz viele Abstürze mit sich brachten. Heutzutage sind sie jedoch sehr stabil. Was heißt das?: Apps werden nicht an einem Tag fertig entwickelt. Schritt für Schritt verschwinden auch die Fehler. Oder war das Betriebssystem, dass du gerade nutzt, ganz fehlerfrei als du es zum ersten Mal verwendet hast?


Die im Logcat angezeigte Exception flliegt außerhalb deines Codes. Wenn sie in einem deiner try-catch-Blöcke geflogen wäre, hättest du nicht mal bemerkt, dass es einen Fehler gab.
Stimmt :) Was nicht im Logcat angezeigt wird, bekomme ich als E-Mail zugestellt :D


Die Zuordung zwischen deinem Code und der Klassen- und Zeilenangabe im Stacktrace.
Ach so.
Dann: das einzigste was ich dazu schreiben kann, ist Folgendes: in einem Teil der Stacktrace steht das hier geschrieben:
at android.os.Looper.loop(Looper.java:165)

Und innerhalb der run-Methode (im Parameter der Methode 'execute' der Klasse 'Executor') habe ich auch folgendes geschrieben:
Java:
Looper.prepare();

Alle andere Methode, die im Stacktrace angezeigt werden, keine Ahnung woher die kommen :(

Hab ich dich so richtig verstanden?


Mit freundlichen Grüßen, Kumpel :)
 
K

kneitzel

Gast
Hast du dir mein Code überhaupt einmal angeschaut?!? Gehen wir Mal zusammen die 3 tries Mal durch:
Beim ersten try bekomme ich ein E-Mail-Entwurf mit dem Fehler (bereits passiert und bereits gelöst).
Beim zweiten try geht es um ein SocketTimeoutException (also im Grunde genommen, wenn keine Verbindung aufgebaut wurde). Das brauche ich noch nicht abzufangen, weil ich mich zunächst mit dem Wechseln-der-Tabs-Problematik befasse.
Beim dritten try geht es darum, dass ich eine Exception abfange, falls das automatische Wechseln vom ersten zum zweiten Tab nicht geklappt hat (was allerdings ohne Probleme funktioniert hat). Wofür also darüber ein Log zu schreiben?

???
Java:
try{
                        //Code...
                        try {
                            //Code...
                            try {
                                runOnUiThread(new Runnable() {

                                        @Override
                                        public void run() {
                                            TabLayout.Tab tab = tabLayout.getTabAt(1);
                                            tab.select();
                                        }
                                    });
                              
                            }
                            catch (Exception e){
                              
                            }
                          
                            //Code...
                        }
                        catch(SocketTimeoutException ex)
                        {

                        }
                    }
                    catch(Exception e){
                        // Hier habe ich etwas weggelöscht ....
                    }

Also ich sehe da - so wie @mrBrown, zwei leere catch Blöcke. Also die innerste fängt alle Exception, die vom runOnUiThread geworfene Exceptions ....
Und dein //Code... Teil: Wenn da eine SocketTimeoutException geworfen wird, dann siehst Du davon auch nichts.

Also ja: ich stimme @mrBrown in seiner Bewertung auch direkt zu.

Stimmt :) Was nicht im Logcat angezeigt wird, bekomme ich als E-Mail zugestellt :D
Nein, wenn da ein leerer catch Block ist - so wie Du ihn uns gepostet hast - dann bekommst da gar nichts von zu sehen!

Da habe ich aber eine ganz andere Meinung!!!
Ich kenne viele Apps/Programme/Spiele, die ganz am Anfang, als sie noch nicht fertig waren aber trotzdem veröffentlicht wurden, ganz viele Abstürze mit sich brachten. Heutzutage sind sie jedoch sehr stabil. Was heißt das?: Apps werden nicht an einem Tag fertig entwickelt. Schritt für Schritt verschwinden auch die Fehler. Oder war das Betriebssystem, dass du gerade nutzt, ganz fehlerfrei als du es zum ersten Mal verwendet hast?
Du kannst gerne eine andere Meinung haben, aber leere catch Blöcke machen Deine Applikation nicht stabiler oder so. Wenigstens einen Log-Eintrag sollte man schreiben. Das ist ein absolutes Minimum. Und wenn da später wirklich noch was rein soll, dann ggf. noch ein // TODO oder so (zusammen mit einem Backlog Eintrag - wobei das voraussetzt, dass man da irgend eine Art von Verwaltung für offene Punkte hat ... (Und das Vorgehen muss dies natürlich so gestatten. Je nach Abläufen ist das nicht unbedingt gegeben. Klar ...)
 

mrBrown

Super-Moderator
Mitarbeiter
Hast du dir mein Code überhaupt einmal angeschaut?!? [...]
Selbst wenn der Fehler nicht in den beiden Blöcken auftritt: Solcher Code ist immer zu kritisieren. Schon allein deshalb, weil es für eine überwiegend sehr schlechte Code-Qualität spricht.

Keiner der catch-Blöcke würde irgendwo als sinnvoll durchgehen.

Da habe ich aber eine ganz andere Meinung!!!
Ich kenne viele Apps/Programme/Spiele, die ganz am Anfang, als sie noch nicht fertig waren aber trotzdem veröffentlicht wurden, ganz viele Abstürze mit sich brachten. Heutzutage sind sie jedoch sehr stabil. Was heißt das?: Apps werden nicht an einem Tag fertig entwickelt. Schritt für Schritt verschwinden auch die Fehler. Oder war das Betriebssystem, dass du gerade nutzt, ganz fehlerfrei als du es zum ersten Mal verwendet hast?
Das ist genau das was ich sagte bzw meint.
Zu Anfang möchtest du jeden Fehler möglichst deutlich angezeigt bekommen, und das ist mindestens sinnvolles Logging. Dinge wie automatisches Error-Reporting kommen dann auf Dauer dazu.

Du machst halt genau das Gegenteil davon.

Was nicht im Logcat angezeigt wird, bekomme ich als E-Mail zugestellt :D
Nö, eben nicht. Alles, was mit einem leeren catch-Block abgefangen wird, wird einfach ignoriert und du bekommst es niemals zu sehen.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde dich übrigens bitten, bei deinen nächsten Fragen nicht fremden Code als deinen eigenen auszugeben.
Damit fällst du leider nicht zum ersten Mal negativ auf.
 

Nemo2478

Aktives Mitglied
Da, seid ihr jetzt zufrieden?
Java:
public class MainActivity extends AppCompatActivity
{
    FrameLayout simpleFrameLayout;
    TabLayout tabLayout;
    SecondFragment s = new SecondFragment();
  
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      
      
        simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
// Create a new Tab named "First"
        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("First"); // set the Text for the first Tab
  
// first tab
        tabLayout.addTab(firstTab); // add  the tab at in the TabLayout
// Create a new Tab named "Second"
        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Second"); // set the Text for the second Tab
      
        tabLayout.addTab(secondTab); // add  the tab  in the TabLayout

        Fragment fragment = null;
        fragment = new FirstFragment();
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.simpleFrameLayout, fragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();
      
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
// get the current selected tab's position and replace the fragment accordingly
                    Fragment fragment = null;
                    switch (tab.getPosition()) {
                        case 0:
                            fragment = new FirstFragment();
                            myMenu.findItem(R.id.telefono).setVisible(false);
                            break;
                        case 1:
                            fragment = s;
                            myMenu.findItem(R.id.telefono).setVisible(true);
                            break;
                    }
                    FragmentManager fm = getSupportFragmentManager();
                    FragmentTransaction ft = fm.beginTransaction();
                    ft.replace(R.id.simpleFrameLayout, fragment);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    ft.commit();
                }
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {

                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {

                }
            });
    }
  
  
  
    public void connect(String nombre, String ip, int puerto) { //Diese Methode wird aufgerufen, wenn der Button aus Tab 1 getätigt wird
        //Code...
        Executor executor = Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {
                @Override
                public void run() {
                    Looper.prepare();
                  
                    try{
                        //Code...
                        try {
                            //Code...
                            try {
                                runOnUiThread(new Runnable() {

                                        @Override
                                        public void run() {
                                            TabLayout.Tab tab = tabLayout.getTabAt(1);
                                            tab.select();
                                        }
                                    });
                              
                            }
                            catch (Exception e){
                           Log.d("Rs", "Exception", e);   
                            }
                          
                            //Code...
                        }
                        catch(SocketTimeoutException ex)
                        {
Log.d("Rs", "Exception", e);
                        }
                    }
                    catch(Exception e){
                        StringWriter sw = new StringWriter();
                        e.printStackTrace(new PrintWriter(sw));
                        String stacktrace = sw.toString();
                        // create an email intent to send to yourself
                        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
                        emailIntent.setType("plain/text");
                        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "lets.think.android@gmail.com" });
                        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "App Error Report");
                        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, stacktrace);
                        // start the email activity - note you need to start it with a chooser
                        startActivity(Intent.createChooser(emailIntent, "Send error report..."));
                    }
                }
            });

    }
  
  
}


Wie löse ich jetzt das Problem des Wechseln der Tabs?


Ich würde dich übrigens bitten, bei deinen nächsten Fragen nicht fremden Code als deinen eigenen auszugeben.
Damit fällst du leider nicht zum ersten Mal negativ auf.
Was genau meinst du damit? Denn ich möchte positiv ausfallen.
 

Nemo2478

Aktives Mitglied
Hab's gelöst! :)

Und zwar lag das Problem hier:

Java:
runOnUiThread(new Runnable() {

                                        @Override
                                        public void run() {
                                            TabLayout.Tab tab = tabLayout.getTabAt(1);
                                            tab.select();
                                        }
                                    });

Mehr verrate ich nicht.

Ich habe es hinbekommen ohne eure Kommentare bzw. nichtsnutzige Kritik.

Die hätte ich ja gleich auf mein WC-Klopapier ausdrucken lassen können, insbesondere die von @mrBrown.
 
K

kneitzel

Gast
Ich habe es hinbekommen ohne eure Kommentare bzw. nichtsnutzige Kritik.

Die hätte ich ja gleich auf mein WC-Klopapier ausdrucken lassen können, insbesondere die von @mrBrown.
Warum bist Du eigentlich noch hier? Wenn dir hier doch eh nicht weiter geholfen werden kann und ...

Ich finde es nur lachhaft, wie unbelehrbar Du bist. Der Hinweis mit den leeren Catch-Blöcken ist auf jeden Fall wichtig. Und Deine Reaktion z.B. in #7 ist absolut unverständlich.... (Aber klar: Sowas passiert, wenn man Code einfach kopiert und nicht einmal selbst kennt.)

Die Tatsache, dass @mrBrown anscheinend zumindest Teile Deines Codes woanders gefunden hat, bestärkt mich in der Annahme, dass Du ein "Copy & Paste" Entwickler bist, der sich im Web Teile zusammen sucht ohne diese wirklich zu verstehen. Ist ok, wenn Du glaubst, dass Software Entwicklung eben dieses Frickeln ist. Nur eben ist es zum einen juristisch bedenklich wie @mrBrown bereits gesagt hat und zum anderen hat das auch gewisse Auswirkungen, denn so hast Du eben kein Verständnis, was Du da überhaupt machst. Im Bereich der Softwareentwicklung ist dies eine fatale Sache, denn ein "es scheint zu funktionieren" fliegt einem mit immer höher werdender Komplexität immer wahrscheinlicher um die Ohren!

Aber ich werde mit meiner nichtsnützigen Kritik an dieser Stelle direkt aufhören. Ich freue mich, dass Du meinst, Dein Problem gelöst zu haben. Und da wir ja immer auf irgendwelchen Unsinnigen Dingen rumreiten, freue ich mich, dass Du zukünftig auf die Nutzung Dieses Forums verzichten wirst. Das ist ein sehr schönes, verspätetes Weihnachtsgeschenk und ich bin sicher, auch @mrBrown freut sich riesig darüber.
 

Nemo2478

Aktives Mitglied
Omg bei einer dieser Themen kommt Französisch vor. Das war ich bestimmt nicht, Alter. Und das passt auch nicht richtig zur "Übersetzung" aufs Deutsch. Wie kannst du nur so [...] sein... Ich bin der Author von 3/4 Themen die du gepostet hast.


Vielleicht programmierst du aber auch eigentlich auf Spanisch und übersetzt den Code dann teilweise fürs Forum hier 🤷‍♂️
Da du aber schon öfters Fremden Code und auch Erklärungen dazu einfach stumpf geklaut und übersetzt hast geh ich da erstmal nicht von deiner Ehrlichkeit aus...
Wie gesagt: ich bin der Author von vielen dieser spanischen Themen. Aber bis man es erkennt kann es durchaus möglich sein, dass man eine Weile doof ist und falsche Schlussfolgerungen zieht. Hier kann ich wirklich sagen, dass nichts auf die Schnelle gehen kann. Ein Stück Dreck geht hier auf die Schnelle. Wenn du wirklich versuchen möchtest etwas zu beweisen musst du ein bisschen gründlicher forschen...


Nice, würd ich auch nehmen!
Was? Das Klopapier 🤣🤣?!?


Auch du Heiliger **********. Wer hat denn dieser Klugscheißer aufs Forum bestellt?


Ich finde es nur lachhaft, wie unbelehrbar Du bist.
Wie soll ich sonst sein, wenn von Leute wie du umgeben bin?


Die Tatsache, dass @mrBrown anscheinend zumindest Teile Deines Codes woanders gefunden hat, bestärkt mich in der Annahme, dass Du ein "Copy & Paste" Entwickler bist, der sich im Web Teile zusammen sucht ohne diese wirklich zu verstehen. Ist ok, wenn Du glaubst, dass Software Entwicklung eben dieses Frickeln ist. Nur eben ist es zum einen juristisch bedenklich wie @mrBrown bereits gesagt hat und zum anderen hat das auch gewisse Auswirkungen, denn so hast Du eben kein Verständnis, was Du da überhaupt machst.
Ich bin der Author von diesen Codes. Und manchmal habe ich sie mir Absicht Extra schlecht geschrieben, um euch einen Spiegel vors Gesicht zu stellen, damit ihr sehen könnt, was für Menschen ihr seid, wenn ihr kritisiert.


Und da wir ja immer auf irgendwelchen Unsinnigen Dingen rumreiten, freue ich mich, dass Du zukünftig auf die Nutzung Dieses Forums verzichten wirst. Das ist ein sehr schönes, verspätetes Weihnachtsgeschenk und ich bin sicher, auch @mrBrown freut sich riesig darüber.
Wie kommst du auf so eine bescheuerte Idee? Wenn jemand ein "unsinniges" Thema mit einem Abschied von mir in diesem Forum, weil du mich verachtest, in Verbindung bringt, eine einfache Art zu sprechen, genauso wie „unbelehrbare und Copy&Paste“ Menschen mit Höflichkeit und Respekt zu behandeln, welche Art von Verstand hast du? Wovon das Herz voll ist, davon redet der Mund.

Du drückst aus, was du im Inneren hast. In deinem Fall heißt es „Projektion“ (in der Psychologie). Du projizierst auf andere das, was du bist. @mrBrown sieht suspekte Dinge dort, wo es keine gibt, und findet "geklaute Codes", die gar nicht geklaut sind; und du siehst Perversion und Abschieds-Pflicht für mich (in diesem Forum), wo so etwas es nicht gibt, ihr schreibt über euch selbst, nicht über mich. All das ist in euren Gedanken, nicht in meinen.

Weißt du was mich zum Lachen bringt? Ihr habt es drauf durch Kommentare mich auseinander zu reißen, weil ich eben "der andere" bin. Dabei merkt ihr aber nicht, dass ihr alle die Gleiche seid.

Offensichtlich greift ihr mich an, es ist etwas sehr Grundlegendes in einer Debatte. Wenn man keine soliden Argumente hat, um den Gegner zu widerlegen, greift man den Gegner an. Ihr schreibt dies in einem ungeschickten Manöver, um mich zu disqualifizieren.

Ihr sprecht und drückt euch aus wie Psychopathen. So sind die Psychopathen, sie reden wie ihr, sie denken wie ihr. Ich habe viele Foren bereits durchgegangen, obwohl ihr am hartnäckigsten wart.

Ihr habt Zeit verschwendet, ich habe Zeit verschwendet und ihr habt die ganze Zeit der Community verschwendet.

Ihr seid hier nicht die „Vox Populi“.

Und für die Community ist die Debatte mit Psychopathen eine ewige Debatte und sie haben immer das letzte Wort. Sie sind Demonstranten und bringen es nie zum Ende, sie wissen nicht, wie sie mit etwas Schluss machen sollen. So wie sie in der Debatte das sind was sie sind, sind sie im Leben das was sie in der Debatte sind, sie verstehen nicht, dass die Dinge ein Ende haben, sie wissen nicht, wie sie irgendetwas sozusagen auf einer „gesunden Weise“ beenden können. So sind sie auch mit den Beziehungen. Wenn ihr einen psychisch kranker Freund hattet und die Beziehung beenden wolltet, wird er euch niemals verlassen, er wird euch für den Rest eures Lebens ärgern. Sie sind komplex, kompliziert und hochintelligent, haben einen hohen IQ, aber fast keine emotionale Intelligenz (&& @mrBrown && @kneitzel == true). Sehr toxische Menschen.

Und ja, ich möchte hier nicht mehr sein. Es ist schon genug, dass ich von toxischen Viren infeziert wurde. Ich wünsche mir dies sei mein vorletztes Thema (mein letztes würde dann nichts "Unsinniges" haben). Es kommt drauf an, ob ihr diesmal aufs Gewinnen der Diskussion verzichtet oder ob ihr weiter tun werdet was ihr nicht lassen könnt. Je nachdem verlasse ich freiwillig dieses Forum oder auch nicht. Es reicht allerdings schon mit mit einer blöden Aussage oder einem blöden Spruch, auch wenn sie oder er noch so klein ist...
 
K

kneitzel

Gast
Also ich denke, dass sehr wohl Argumente gebracht wurden (#6 von mir war sachlich ein Hinweis, dass da leere catch Blöcken in deinem Code waren. Und diese sind nun einmal extrem kontraproduktiv, wie wir es hier im Forum regelmäßig erleben und wie man auch ohne die vielen Thread zu kennen auch durch nachvollziehen von unseren Argumenten verstehen kann.

Und in diesem einfachen Punkt warst Du unbelehrbar. Wie kannst Du hier noch diskutieren wollen? Einfache Fakten....

Und auf Grund der Tatsache, wie Dein Code aufgebaut und strukturiert ist, habe ich tatsächlich genau diesen Eindruck bekommen - dass Du jemand bist, der sich vor allem von Code-Stückchen, die er irgendwo findet, leiten lässt. Das ist weniger durch diesen Thread sondern vor allem durch den anderen Thread mit der Transaction in dem Du irgend einen Code gefunden hast und diesen so nicht verstanden / nachvollzogen hast (Sonst wäre klar, welche Klassen welche Methoden haben. Nachvollziehen hat etwas damit zu tun, dass man sich auch die Klassen anschaut, diese versteht und begreift, was diese überhaupt machen.

Unterstrichen wird es von den Fundstücken von @mrBrown. Prinzipiell spricht nichts dagegen, Code ab zu schauen. Das mache ich selbst auch. Aber ich kopiere nicht einfach Code. Und wenn ich Probleme mit dem Code habe, dann nutze ich den entsprechenden Verweis in meiner Frage. (Hey, ich habe https://... gefunden und dieses oder jenes geht nicht / verstehe ich nicht.) Das ist der Punkt, den @mrBrown stört. Mir selbst ist es egal, da ich in den kleinen Code-Stücken nicht die Schöpfungshöhe sehe, die für das Urheberrecht notwendig wäre. Für mich ist es nur ein Beweis, dass der Code, den Du hier so präsentierst, prinzipiell schon längst vorhanden ist - und auf Grund mehrfacher Vorkommen sehe ich dies als Bestätigung meiner These an.

Damit mag ich falsch liegen. Ist mir ehrlich gesagt auch egal. Aber mit dem Post #10 hast Du einfach Dein Wesen gezeigt. Daher meine Reaktion und Deine Antwort bestätigt mich. Und nein: Ich verachte Dich nicht. Deine Handlungen hier verachte ich aber, weil schlicht asozial (und dann kommen Kommentare von Dir zur emotionale Intelligenz?) und auf diese kann ICH HIER sehr gut verzichten.

Aber damit bin ich jetzt raus aus dem Thread hier ....
 

Meniskusschaden

Top Contributor
Und manchmal habe ich sie mir Absicht Extra schlecht geschrieben, um euch einen Spiegel vors Gesicht zu stellen, damit ihr sehen könnt, was für Menschen ihr seid, wenn ihr kritisiert.
Wenn du ohnehin die Absicht hattest, die Reaktionen zu provozieren, die du nun auch bekommen hast, verstehe ich deine Aufregung nicht. Es ist doch alles in deinem Sinne gelaufen.;)
 

Noahscript

Aktives Mitglied
Abgesehen von seinem offensichtlich "spanischen" Temperament, erlaube ich mir von ihm ein paar "Ideen" für meine erste App zu klauen... 😁
 
K

kneitzel

Gast
Dürfte ich aus Neugierde erfahren, was Du gedenkst, zu "klauen"?

Wenn es um Fragmente geht und so, würde ich eher empfehlen, mal bei https://developer.android.com/guide/fragments zu schauen, was man da so findet ...

Und bezüglich Verschachtelungstiefe und so: Es findet sich bestimmt einiges im Netz bezüglich Clean Code, das man gerne "klauen" darf :)
 

Noahscript

Aktives Mitglied
Dürfte ich aus Neugierde erfahren, was Du gedenkst, zu "klauen"?
Gerne, das wäre mir ein Vergnügen. Danke für die Frage! 😀

Als ich in der Zeit des Lernens mit Fragments zur Übung verschiedene Sachen rumprobiert habe, da hatte ich Kopfschmerzen. Ich hatte viele Probleme im Bezug auf die Kommunikation zwischen MainActivity und Fragments, um umgekehrt und dann zwischen Fragments selber. Es gab fast keinen Tag in der ich etwas "in Ordnung" zustande bringen konnte. Und dann kam noch das Problem, dass ich dauernd die Klassen verwechselt habe...

Wenn es um Fragmente geht und so, würde ich eher empfehlen, mal bei https://developer.android.com/guide/fragments zu schauen, was man da so findet ...
Das was dort geschrieben steht ist wirklich gut. Es wird alles ausführlich beschrieben. Aber trotzdem komme ich durcheinander :( ... Zudem bin ich auch vergesslich. Wenn etwas bei mir sitzt und ich etwas Neues dazu lerne, vergesse ich oft, das was ich vorher gelernt habe. Und wenn sich zwei gelernten Themen kreuzen, dann gibt es manchmal eine Katastrophe.

Bei meiner App habe ich mir überlegt, wie die Einträge oder Registerkarte, zwischen denen man zu wechseln können sollte, aussehen können.

Deswegen gefiel mir die Idee von einem einfachen TabLayout mit nur zwei Registerkarten (auf einer Registerkarte stehen der Nick und andere optionale Daten und auf der anderen findet der eigentliche Chat statt). Diese würde ich gerne klauen... Und hier habe ich einen Super-Tutorial gefunden: https://abhiandroid.com/materialdesign/tablayout-example-android-studio.html

Des Weiteren fand ich die Idee des automatischen Registerkarten-Wechsels gut. Da hätte ich wieder nicht dran gedacht. Im Ernst: Selbst wenn die App fertig gewesen wäre, wäre mir nicht aufgefallen, dass es blöd ist, wenn man die Registerkarten manuell wechseln muss... 🤦‍♂️ Aber gut, auch diese Idee würde ich gerne klauen, auch wenn sie noch so logisch klingt...

Und zu guter Letzt, das hier:
SecondFragment s = new SecondFragment();
Interessant, dass er nur SecondFragment initialisiert. FirstFragment dagegen nicht. Schlussfolgerung? Er verwendet es vermutlich in einer seiner "//Code..."-Blöcke. Das habe ich dumm und dämlich versucht. Nun habe ich es endlich in einem try-catch Block ausprobiert und... ¡tatsächlich klappt es! Ich habe sonst ein Timer und SharedPreferences verwendet und somit die Daten im Handy speichern lassen. Also dann: indirekt oder direkt, wurde diese Idee von mir auch geklaut.
 
K

kneitzel

Gast
Es ist gut zu lesen, dass es Dir mehr um Ideen geht als um konkrete Code-Blöcke. Ich hatte nur Angst, dass wir so einen Code Block wie hier im Thread mit leichten Abwandlungen weiter um die Ohren gehauen bekommen :)

Und das mit dem durcheinander kommen ist normal am Anfang. Daher wäre mein Vorschlag, da eine Test-App zu schreiben, in der es erst einmal nur um reine UI Funktionalität geht. In der probierst Du dann nur Dinge rund um die UI aus...
Ich neige dazu, bei so Tests immer mehrere Wege auszuprobieren (so ich mehrere finde). Wenn also zu einem Thema jemand meinte, dass es auch Anders gehen sollte: Das wird dann auch recherchiert. (Also einmal den Weg betrachten, verstehen, was da wie gemacht wird und schauen, ob dies so ein "angedachter Weg" ist. (Also nichts anders verwendet wird, als angedacht. Sowas neigt dazu, in späteren Versionen nicht mehr zu funktionieren....)

Und ich bin ein Schmierfink -> Ich habe meinen A4 Ringblock hier liegen und da wird viel mit Skizzen gearbeitet. (Landet dann später in einem Dokument. Skizzen von mir werden einfach eingescannt und Text wird sauber geschrieben....)

Aber Du scheinst auch eine valide Herangehensweise zu habe, denn Du scheinst auch mehr nach Dokumentation zu einem WIE zu suchen als nach fertigem Code, der irgendwas irgendwie macht und das scheint irgendwie zu passen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Plötzlich "java.lang.String cannot be converted to JSONObject" Android & Cross-Platform Mobile Apps 9
M jsonobject cannot be cast to java.lang.string Android & Cross-Platform Mobile Apps 4
M Fehler ohne Sinn? java.lang.RuntimeException: Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 11
B java.lang.RuntimeException: Unable to start activity ComponentInfo Android & Cross-Platform Mobile Apps 2
M Android Switch-Klasse stoppt Android App / java.lang.NullPointerException Android & Cross-Platform Mobile Apps 5
D java.lang.UnsatisfiedLinkError Android & Cross-Platform Mobile Apps 3
G java.lang.NullPointerException weiß nich warum Android & Cross-Platform Mobile Apps 7
AllBlack Suche Programmierer in Java und Kotlin mit dem ich mich Selbstständig machen kann Android & Cross-Platform Mobile Apps 23
W Netzwerk Verbindungen Java Android Android & Cross-Platform Mobile Apps 107
Adem61 Flutter Frontend und Java Backend möglich ? Android & Cross-Platform Mobile Apps 2
M Repository bei Room-Database in Android Studio (Java) Android & Cross-Platform Mobile Apps 2
T Android Android Augmented Faces in Java. Neue Landmarks erstellen Android & Cross-Platform Mobile Apps 1
rafi072001 Java API um HTML Elemente von externen Websiten zu bekommen Android & Cross-Platform Mobile Apps 2
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
ruutaiokwu Wie fügt man bei Android Studio .jar-Libraries zu einem Android-Java-Projekt hinzu? Android & Cross-Platform Mobile Apps 33
M Gradle sync failed: Could not determine Java version using executable Android & Cross-Platform Mobile Apps 5
J AndroidStudio Login.Java Android & Cross-Platform Mobile Apps 0
O Web API in Android (JAVA) einbinden Android & Cross-Platform Mobile Apps 3
N Wie kann ich mein Handy mit Java rooten? Android & Cross-Platform Mobile Apps 38
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
T Fehler Android Studio: java.net.MalformedURLException: no protocol: http%3A%2F%2Fwww.mal ..... Android & Cross-Platform Mobile Apps 2
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
L Android RadioButtonGroup innerhalb der JAVA Android & Cross-Platform Mobile Apps 4
L Android Java scheint XML nicht zu finden Android & Cross-Platform Mobile Apps 11
J Android String in andere Java-Dateien überführen Android & Cross-Platform Mobile Apps 1
J Android Java Packet in Android Java ide hinzufügen. Android & Cross-Platform Mobile Apps 3
T Usage: java ZipInfo zfname Android & Cross-Platform Mobile Apps 2
P Android App - Java Android & Cross-Platform Mobile Apps 1
S Android Android java onclick listener Problem Android & Cross-Platform Mobile Apps 9
P Android JUnit Testprojekt warum keine Java Klassen Android & Cross-Platform Mobile Apps 1
A Android join."," von python in java Android & Cross-Platform Mobile Apps 4
C Android Code in mehrere .java verteilen Android & Cross-Platform Mobile Apps 6
T Android Android Sensor: Java Problem Android & Cross-Platform Mobile Apps 1
A Wieso keine java - forum app Android & Cross-Platform Mobile Apps 4
D Lib für (Desktop-)Java und Android schreiben Android & Cross-Platform Mobile Apps 7
D Android Java-Umfang durch Apps-Entwicklung? Android & Cross-Platform Mobile Apps 1
W Java Editor für Android +Emulator Android & Cross-Platform Mobile Apps 7
L Mit Java ein Android Projekt kompilieren Android & Cross-Platform Mobile Apps 6
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
J Android-App-Programmierung - Ähnlich normaler Java-Programmierung? Android & Cross-Platform Mobile Apps 6
G R.java erzeugen Android & Cross-Platform Mobile Apps 5
M Java und App Programmierung in 4 Monaten? Android & Cross-Platform Mobile Apps 7
X Unable to execute dex: Java heap space Exception bei Sqllite lib Android & Cross-Platform Mobile Apps 14
G Wie kann ich nachhelfen die R.java zu aktualisieren? Android & Cross-Platform Mobile Apps 3
G Android XML - Teil in Java importieren Android & Cross-Platform Mobile Apps 2
M Push-Nachricht via Java Android & Cross-Platform Mobile Apps 2
F Bilder in Java importieren (Fehler?) Android & Cross-Platform Mobile Apps 5
L Java Anwendungen fürs IPad Android & Cross-Platform Mobile Apps 6
S Desktop Anwedung ( Java 6 ) auf android zu greifen. Android & Cross-Platform Mobile Apps 6
V App Daten in Java Applikation Android & Cross-Platform Mobile Apps 3
L Android Android über Java Code connecten? Android & Cross-Platform Mobile Apps 2
A Android SimpleDateFormat gibt für Date unter android anderes Datum zurück als in Std. Java Android & Cross-Platform Mobile Apps 2
S Android binäre Daten zwischen Android und einem Java-Server Android & Cross-Platform Mobile Apps 5
A Java Symbian Programmierung Android & Cross-Platform Mobile Apps 4
S Android Java, Android und Serializable Android & Cross-Platform Mobile Apps 3
M Frage zu Java Programm für Windows Mobile 6.5 Android & Cross-Platform Mobile Apps 2
H Mjpeg Code läuft unter Java jedoch nicht unter Android? Android & Cross-Platform Mobile Apps 11
W Android Crosswordliste Java<->Android Syntax Android & Cross-Platform Mobile Apps 5
H Android ANDROID SDK + JAVA SE Development Kit (JDK) Android & Cross-Platform Mobile Apps 4
B Java auf dem Handy Android & Cross-Platform Mobile Apps 5
Y sun java wireless toolkit couldnt find jdk Android & Cross-Platform Mobile Apps 2
S ipod app mit java Android & Cross-Platform Mobile Apps 22
J Java ME java.rmi.Remote kann nicht gefunden/geladen werden Android & Cross-Platform Mobile Apps 9
Bastifantasti Java ME Objekte in Java? Android & Cross-Platform Mobile Apps 3
P Java ME Java me sdk3 - bin am ende Android & Cross-Platform Mobile Apps 7
K Java ME Handy Java App die die Navigationstasten abfragt Android & Cross-Platform Mobile Apps 7
W Android gleich Java? Android & Cross-Platform Mobile Apps 3
C Java ME Kein Java Zugriff auf Samsung! Android & Cross-Platform Mobile Apps 5
R Handy Java Version Android & Cross-Platform Mobile Apps 18
J iPhone/iPod/iPad und Java? Android & Cross-Platform Mobile Apps 12
E Java ME package java.sql does not exist? Android & Cross-Platform Mobile Apps 2
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
O Entwickler für Java Anwendungen auf Handy gesucht! Android & Cross-Platform Mobile Apps 3
I Java Handy - mehrere Programme gleichzeitig Android & Cross-Platform Mobile Apps 8
Screen Java auf Handy,aber nicht Ja2Me ! Android & Cross-Platform Mobile Apps 3
T Java Mobile SDK 3 - Can't Connect to Device Manager Android & Cross-Platform Mobile Apps 14
R Java Programmierung auf Handys Android & Cross-Platform Mobile Apps 8
B Java PC Spiel fürs Handy umwandeln? Android & Cross-Platform Mobile Apps 8
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
Outsourcer Kann Java das? Android & Cross-Platform Mobile Apps 13
R Java ME mit Zugriff auf Adressbuch / Kalender Android & Cross-Platform Mobile Apps 3
G Hab mal allgeneine Frageb zu Java ME ! Android & Cross-Platform Mobile Apps 2
H WTK 2.5.2 nur mit Java 1.5? Android & Cross-Platform Mobile Apps 4
T Java Bluetooth Kalender Android & Cross-Platform Mobile Apps 2
W Java auf ein CECT Handy installieren Android & Cross-Platform Mobile Apps 6
A Java Programm auf Handy? Android & Cross-Platform Mobile Apps 2
C Telefonanruf mit Java absetzen? Android & Cross-Platform Mobile Apps 5
L Ungültiges Java-Archiv (jar) nach Programmentwicklung Android & Cross-Platform Mobile Apps 4
F Welches Buch zu java ME könnt ihr empfehlen? Android & Cross-Platform Mobile Apps 2
TheJavaKid handy java comiler Android & Cross-Platform Mobile Apps 5
P Java für PDA DELL Axim 51 Android & Cross-Platform Mobile Apps 4
J J2ME Java Programm im Hintergrund auf Handy laufen lassen? Android & Cross-Platform Mobile Apps 2
N Anfängerfrage - mit Java einen Anruf initiieren ? Android & Cross-Platform Mobile Apps 3
D c programm als java application aufs nokia 6230 Android & Cross-Platform Mobile Apps 2
M Java Midlet -> in einem ChoiceGroup ein TextField zur Wah Android & Cross-Platform Mobile Apps 2
H Java auf PDA Android & Cross-Platform Mobile Apps 11
G SMS versenden mit Java Android & Cross-Platform Mobile Apps 2
F Per Java zu Handy connecten Android & Cross-Platform Mobile Apps 5
G Java Programme auf Palm übertragen. Android & Cross-Platform Mobile Apps 4
M Java-Programme für Handy auf Desktop-PC ausführen Android & Cross-Platform Mobile Apps 4

Ähnliche Java Themen

Neue Themen


Oben