Toast wird nicht auf allen Geräten dargestellt

M

MegaChroniX

Neues Mitglied
1
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()
 
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:
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:
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]
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
231
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
136
swa00
swa00
G
Antworten
8
Aufrufe
1.196
gnome2012
G
Zurück
Oben Unten