1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Toast wird nicht auf allen Geräten dargestellt

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von MegaChroniX, 06.08.2012.

  1. MegaChroniX, 06.08.2012 #1
    MegaChroniX

    MegaChroniX Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    1
    Registriert seit:
    24.10.2011
    Hallo,

    ich habe ein ein riesen Problem und weiß dieses nicht zu lösen :(

    Ich entwickel eine App und teste auf einem Galaxy Nexus und Galaxy S2 parallel.

    Das Problem ist, dass die Toast-Nachricht auf dem Nexus nicht angezeigt werden...
    Auf dem S2 allerdings schon, dort wird alles wie es soll anzezeigt...

    Wie kann dieses Problem auftreten?
    Wenn die Toasts fehlerhaft sind müssten sie ja auf beiden Geräten nicht angezeigt werden...

    Code:
    
    import ....
    
    
    /**
     * Startseite des Programms. Anmeldefester für den Benutzer.
     */
    public class LoginActivity extends Activity implements OnClickListener
    {
    
       private static String TAG = "LoginActivity";
    
       private EditText username;
       private EditText password;
       private String user;
       private String pass;
       private TextView error;
       private Button login;
       private int lo = 0;
       private ProgressDialog pd;
       /*
        * Wird bei Beendigung des Threads aufgerufen.
        */
       private Handler handler = new Handler()
       {
          @Override
          public void handleMessage(Message msg)
          {
             pd.dismiss();
             doLogin();
          }
       };
    
       /* Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState)
       {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.login);
    
          // Zuweisen der Textfelder an Objekte
          username = (EditText) findViewById(R.id.editTextUsername);
          password = (EditText) findViewById(R.id.editTextPassword);
          error = (TextView) findViewById(R.id.textViewLoginError);
          login = (Button) findViewById(R.id.buttonLogin);
          login.setOnClickListener(this);
    
       }
    
       @Override
       public void onClick(View v)
       {
          // Auslesen von Benutzername und Passwort
          user = username.getText().toString();
          pass = password.getText().toString();
    
          // Anzeige eines "Warten Dialogs" solange die Anmeldedaten vom
          // Webservice kontrolliert werden.
          pd = ProgressDialog.show(this, getString(R.string.wait), getString(R.string.logging_in), true, false);
    
    
          Thread thread = new Thread()
          {
             @Override
             public void run()
             {
    
                // Prüfen ob der login gültig ist
                lo = [...netz transaktion, gibt den code zurück ob login gültig etc...]
                handler.sendEmptyMessage(0);
             }
          };
          thread.start();
    
       }
       
       // Verarbeiten des Logins
       private void doLogin()
       {
          switch (lo)
          {
          // Bei erfolgreichem Login
             case 1:
                Intent in = new Intent(this, RosterActivity.class);
                in.putExtra("mail", user);
                startActivity(in);
                error.setText("");
                break;
    
             // Bei Misserfolg(Login)
             case 0:
                // Anzeigen eines Toast mit der Fehlermeldung über einen Falschen
                // Login
                Toast.makeText(getApplicationContext(), getString(R.string.login_wrong), Toast.LENGTH_SHORT).show();
                error.setText(getString(R.string.login_wrong));
                break;
    
             // Wenn Server nicht antwortet
             case -3:
                // Toast mit der Fehlermeldung dass das Netz nicht verfügbar ist.
                Toast.makeText(getApplicationContext(), getString(R.string.server_timeout), Toast.LENGTH_SHORT).show();
                error.setText(getString(R.string.server_timeout));
                break;
    
             // Falls sonst was passiert
             default:
                Toast.makeText(getApplicationContext(), getString(R.string.unknown_error), Toast.LENGTH_SHORT).show();
                break;
          }
       }
    
       @Override
       public boolean onCreateOptionsMenu(Menu menu)
       {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.server, menu);
          return true;
       }
    
       @Override
       public boolean onOptionsItemSelected(MenuItem item)
       {
          switch (item.getItemId())
          {
             case R.id.menu_server:
                Intent intent = new Intent(this, ServerActivity.class);
                startActivity(intent);
                return true;
    
             default:
                return super.onOptionsItemSelected(item);
          }
       }
    }
    
    PS: es geht werder mit this noch mit getApplicationContext()
     
  2. maniac103, 06.08.2012 #2
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    Ich würde mal vermuten, dass doLogin nicht im UI-Thread läuft - die Symptome klingen jedenfalls danach.

    Läuft auf dem S2 noch Gingerbread? Das war diesbezüglich toleranter.

    BTW, mit einem AsyncTask lässt sich sowas schön implementieren.

    Gesendet von meinem MB525 mit Tapatalk 2
     
    Zuletzt bearbeitet: 06.08.2012
  3. MegaChroniX, 06.08.2012 #3
    MegaChroniX

    MegaChroniX Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    1
    Registriert seit:
    24.10.2011
    hi, danke für die schnelle antwort

    also das phenomen tritt erst seit kurzem auf.

    beide geräte laufen auf android 4.1.1
    das s2 mit cyanogenmod10beta

    kann der problem mit dem umstieg von 4.0 auf 4.1 zusammenhängen?

    Was genau meinst du mit AsyncTask?
    Ist es "elegenter" darin die Netzkommunikation zu implementieren?



    EDIT:

    ok. habe die aktivity jetzt auf den asynktask umgebaut, (war ja ganz einfach und weniger code ist es auch noch oO )

    naja, jedenfalls: weiterhin nur auf dem S2 Toast ausgaben.

    Zusätzlich habe ich mal nen Emulator mit API 16 erstellt.
    Dort werden die Toasts auch angezeigt.

    Kann es evtl an dem Nexus liegen, dass man Toasts Handyseitig verbeitet ? Bei anderen Apps funktioniert die Ausgabe aber...
     
    Zuletzt bearbeitet: 06.08.2012
  4. 7P_diabolus, 07.08.2012 #4
    7P_diabolus

    7P_diabolus Neuer Benutzer

    Beiträge:
    1
    Erhaltene Danke:
    0
    Registriert seit:
    07.08.2012
    hey,

    ja, man kann die Toasts abschalten. Unter Einstellungen -> Apps -> FacilityManager kann man einen Haken "Benachrichtigungen anzeigen" setzen. Das deaktiviert die Toasts und u.A. auch die Status-LED.

    Leider behält seit Android 4 das Handy die Einstellung auch nach einer erneuten Installation.

    PS: Tobi, ich hab´s gelöst ^^

    [CLOSED]
     

Diese Seite empfehlen