2016-10-05 2 views
1

Dans le programme ci-dessous utilisé pour une application android dans les studios Android, Quand getPercent() de la deuxième classe (Main2Activity) est appelé, il retourne toujours 999 (la valeur par défaut), et,Une partie de mon code ne s'exécute pas dans les studios android?

ttper = .....;

L'instruction de la classe principale dans onClick() n'est jamais exécutée. Y a-t-il une raison spécifique à cela? Pouvez-vous le signaler s'il vous plaît!

Ceci est l'activité principale,

public class MainActivity extends AppCompatActivity { 

float i1m,i2m,mm,atp,assp; 
float ttper=999; 
boolean b=false; 
EditText i1,i2,model,assignment,attendence; 
Button b1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Context cont = this; 
    final Intent intent = new Intent(cont, Main2Activity.class); 

    b1=(Button)findViewById(R.id.button2); 
    b1.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //try { 
      i1=(EditText)findViewById(R.id.int1); 
      i2=(EditText)findViewById(R.id.int2); 
      model=(EditText)findViewById(R.id.mod); 
      assignment=(EditText)findViewById(R.id.assign); 
      attendence=(EditText)findViewById(R.id.attend); 

      i1m = Float.parseFloat(String.valueOf(i1.getText())); 
      i2m = Float.parseFloat(i2.getText().toString()); 
      mm = Float.parseFloat(model.getText().toString()); 
      assp = Float.parseFloat(assignment.getText().toString()); 
      atp = Float.parseFloat(attendence.getText().toString()); 
      ttper = ((i1m/10) + (i2m/10) + ((mm/100) * 15) + (assp) + ((atp >= 75.0f) ? ((atp - 75)/5) : 0.0f)); 

      //setValues(); 
      startActivity(intent); 
      //} 
      //catch (Exception e) { 
       // Log.e("app crash",e.getMessage()); 
      //} 
     } 
    }); 
} 
/*void setValues() 
{ 
    /* i1m = Float.parseFloat(String.valueOf(i1.getText())); 
    i2m = Float.parseFloat(i2.getText().toString()); 
    mm = Float.parseFloat(model.getText().toString()); 
    assp = Float.parseFloat(assignment.getText().toString()); 
    atp = Float.parseFloat(attendence.getText().toString());*/ 
}/* 
float getPercent() 
{ 
     //float ttper=50.0f; 
     return ttper; 
} 
} 

Ceci est la deuxième activité,

public class Main2Activity extends AppCompatActivity { 

float tper=1.0f; 
String str; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     TextView v1 = (TextView) findViewById(R.id.textView11); 
     MainActivity m1 = new MainActivity(); 
     //m1.setValues(); 
     //try { 
      str = String.valueOf(m1.getPercent()) + "%"; 
      v1.setText(str); 
     //} 
    //catch (Exception e) { 
     // Log.e("app crash",e.getMessage()); 
    //} 
} 

} 
+0

peut-être que vous devriez décommenter choses – Blackbelt

+1

Vous ne devriez jamais utiliser 'new' pour créer une instance d'une classe d'activité –

Répondre

1

cela ne peut pas fonctionner. Si vous créez new MainActivity(), votre ttper sera 999.

Vous devez pass data between Activities ainsi:

  1. Mettre le nouveau calculé ttper en intention: intent.putExtra("ttper", ttper);

  2. Puis, en MainActivity2 utilisation getIntent().getFloatExtra("ttper", 999.0f);

+0

Veuillez marquer la question en tant que doublon –

0

Vous avez une instance de MainActivity qui a une ttper variable. Vous modifiez cette valeur. Ensuite, dans une autre classe Main2Activity, vous créez une NOUVELLE instance de MainActivity et essayez d'obtenir cette valeur, mais ttper a la valeur par défaut car il s'agit d'une instance NEW et elle n'a pas encore été modifiée.

Ce que vous pouvez faire est en train de définir ttper comme statique:

static float ttper=999; 

Vous pouvez même définir votre getPercent de fonction() statique de sorte que vous ne devez pas créer une nouvelle instance de cette classe pour obtenir la valeur . Vous appelez simplement MainActivity.getPercent().

Pour plus d'informations, lisez: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Quoi qu'il en soit, ce n'est pas la bonne façon de transmettre des données d'une activité à une autre. Vous devez suivre ces directives: https://developer.android.com/training/basics/firstapp/starting-activity.html

+0

appris une nouvelle chose à propos de statique de vous! Je connaissais la définition mais je ne savais pas ce que je fais. Merci! –

0

Vous devez utiliser extras sur les intentions pour transmettre des données entre les activités.