2012-03-25 18 views
0

Mein Problem ist, dass, wenn ich versuche, den Text von service1 und service1Health in meinem Code unter, Der Text wird nicht festgelegt. Irgendwelche Ideen, warum das passiert? service1Name und service1HealthValue haben beide gültige Zeichenfolgenwerte.Textansicht nicht Einstellung von Text in Android

public void onClick(View v) 
{ 

    switch(v.getId()) 
    { 
    case R.id.loginButton: 
     String[] values = new String[2]; 
     String usernameText = ((TextView) activity.findViewById(R.id.usernameTextBox)).getText().toString(); 
     String passwordText = ((TextView) activity.findViewById(R.id.txtPasswordField)).getText().toString(); 

     if (usernameText.length()==0 || passwordText.length()==0) 
      Toast.makeText(activity, "Please fill in both username and password fields", Toast.LENGTH_SHORT).show(); 
     else 
     { 
      Toast.makeText(activity, "Connecting to server", Toast.LENGTH_LONG).show(); 
      String loginResult = Server.login(usernameText,passwordText); 

      values = loginResult.split(","); 

      Intent i = new Intent(activity,Home.class); 
      activity.startActivity(i); 
      activity.setContentView(R.layout.home); 

      String service1Name = Server.getServices("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
      String service1HealthValue = Server.getHealth("myservice","xxxxxxxxxxxxxxxxxxxxxxxxxxx"); 


      TextView service1= ((TextView) activity.findViewById(R.id.serviceName1)); 
      TextView service1Health= ((TextView) activity.findViewById(R.id.service1Health)); 


      service1.setText(service1Name); 
      service1Health.setText(service1HealthValue); 

     } 
     break; 
    } 
} 
+0

Wahrscheinlich wird nicht helfen, aber haben Sie versucht, die Textviews ungültig zu machen? Hast du überprüft, ob sie von der ID gefunden werden? Versuchen Sie, Log-Nachrichten und LogCat oder Debug zu verwenden, um zu sehen, was passiert. – Vincent

+0

Übrigens sollten Sie in einem Listener keine Netzwerkoperationen durchführen, dafür einen neuen Thread oder eine neue asynctask starten und nach Abschluss des Vorgangs zum GUI-Thread zurückkehren. – Vincent

Antwort

2

Wenn Sie activity.startActivity(i); aufrufen, startet sie eine neue Tätigkeit, so dass jeder Code nach dieser, werden einschließlich activity.setContentView(R.layout.home); nicht erreicht werden, so dass keine dieser TextViews gesetzt bekommen. Wenn Sie diese Werte in der neuen Aktivität festlegen möchten, sollten Sie sie zur Intent hinzufügen und dann in der onCreate-Methode der neuen Activity erneut öffnen. So zum Beispiel in der aktuellen Aktivität:

Intent i = new Intent(activity,Home.class); 
i.putExtra("service1Name", Server.getServices("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); 
i.putExtra("service1HealthValue", Server.getHealth("myservice","xxxxxxxxxxxxxxxxxxxxxxxxxxx")); 
activity.startActivity(i); 

Und in der onCreate Methode der Home.java, fügen Sie folgende:

setContentView(R.layout.home); 
Intent i = getIntent(); 
if (i != null) { 
    //This means that the intent passed here was found 
    String serviceName1 = i.getStringExtra("serviceName1"); 
    String service1HealthValue = i.getStringExtra("service1HealthValue"); 
    TextView service1= ((TextView) activity.findViewById(R.id.serviceName1)); 
    TextView service1Health= ((TextView) activity.findViewById(R.id.service1Health)); 
    service1.setText(service1Name); 
    service1Health.setText(service1HealthValue); 
} 
Verwandte Themen